The Python Oracle

NumPy random seed produces different random numbers

--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: A Thousand Exotic Places Looping v001

--

Chapters
00:00 Numpy Random Seed Produces Different Random Numbers
00:30 Accepted Answer Score 10
01:15 Answer 2 Score 7
01:39 Thank you

--

Full question
https://stackoverflow.com/questions/2932...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #numpy #random

#avk47



ACCEPTED ANSWER

Score 10


You're confusing RandomState with seed. Your first line constructs an object which you can then use as your random source. For example, we make

>>> rnd = np.random.RandomState(3)
>>> rnd
<mtrand.RandomState object at 0xb17e18cc>

and then

>>> rnd.choice(range(20), (5,))
array([10,  3,  8,  0, 19])
>>> rnd.choice(range(20), (5,))
array([10, 11,  9, 10,  6])
>>> rnd = np.random.RandomState(3)
>>> rnd.choice(range(20), (5,))
array([10,  3,  8,  0, 19])
>>> rnd.choice(range(20), (5,))
array([10, 11,  9, 10,  6])

[I don't understand why your idx1 and idx1S agree-- but you didn't actually post a self-contained transcript, so I suspect user error.]

If you want to affect the global state, use seed:

>>> np.random.seed(3)
>>> np.random.choice(range(20),(5,))
array([10,  3,  8,  0, 19])
>>> np.random.choice(range(20),(5,))
array([10, 11,  9, 10,  6])
>>> np.random.seed(3)
>>> np.random.choice(range(20),(5,))
array([10,  3,  8,  0, 19])
>>> np.random.choice(range(20),(5,))
array([10, 11,  9, 10,  6])

Using a specific RandomState object may seem less convenient at first, but it makes a lot of things easier when you want different entropy streams you can tune.




ANSWER 2

Score 7


I think you should use RandomState class as follows:

In [21]: r=np.random.RandomState(3)

In [22]: r.choice(range(20),(5,))
Out[22]: array([10,  3,  8,  0, 19])

In [23]: r.choice(range(20),(5,))
Out[23]: array([10, 11,  9, 10,  6])

In [24]: r=np.random.RandomState(3)

In [25]: r.choice(range(20),(5,))
Out[25]: array([10,  3,  8,  0, 19])

In [26]: r.choice(range(20),(5,))
Out[26]: array([10, 11,  9, 10,  6])

Basicly, you make an instance r of the RandomState and use it further. As can be seen, re-siding produces the same results.