How can I retrieve the current seed of NumPy's random number generator?
The following imports NumPy and sets the seed.
import numpy as np np.random.seed(42)
However, I'm not interested in setting the seed but more in reading it.
random.get_state() does not seem to contain the seed. The documentation doesn't show an obvious answer.
How do I retrieve the current seed used by
numpy.random, assuming I did not set it manually?
I want to use the current seed to carry over for the next iteration of a process.
The short answer is that you simply can't (at least not in general).
The Mersenne Twister RNG used by numpy has 219937-1 possible internal states, whereas a single 64 bit integer has only 264 possible values. It's therefore impossible to map every RNG state to a unique integer seed.
You can get and set the internal state of the RNG directly using
np.random.set_state. The output of
get_state is a tuple whose second element is a
(624,) array of 32 bit integers. This array has more than enough bits to represent every possible internal state of the RNG (2624 * 32 > 219937-1).
The tuple returned by
get_state can be used much like a seed in order to create reproducible sequences of random numbers. For example:
import numpy as np # randomly initialize the RNG from some platform-dependent source of entropy np.random.seed(None) # get the initial state of the RNG st0 = np.random.get_state() # draw some random numbers print(np.random.randint(0, 100, 10)) # [ 8 76 76 33 77 26 3 1 68 21] # set the state back to what it was originally np.random.set_state(st0) # draw again print(np.random.randint(0, 100, 10)) # [ 8 76 76 33 77 26 3 1 68 21]