python - NumPy random seed produces different random numbers -
i run following code:
np.random.randomstate(3) idx1 = np.random.choice(range(20),(5,)) idx2 = np.random.choice(range(20),(5,)) np.random.randomstate(3) idx1s = np.random.choice(range(20),(5,)) idx2s = np.random.choice(range(20),(5,))
the output following:
idx1: array([ 2, 19, 19, 9, 4]) idx1s: array([ 2, 19, 19, 9, 4]) idx2: array([ 9, 2, 7, 10, 6]) idx2s: array([ 5, 16, 9, 11, 15])
idx1 , idx1s match, idx2 , idx2s not match. expect once seed random number generator , repeat same sequence of commands - should produce same sequence of random numbers. not true? or there else missing?
you're confusing randomstate
seed
. first line constructs object can use random source. example, make
>>> rnd = np.random.randomstate(3) >>> rnd <mtrand.randomstate object @ 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 idx1
, idx1s
agree-- didn't post self-contained transcript, suspect user error.]
if want affect 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 specific randomstate
object may seem less convenient @ first, makes lot of things easier when want different entropy streams can tune.
Comments
Post a Comment