Using the same arbitrary seed:
random.seed(42) np.random.seed(42)
Using two different arbitrary seeds:
random.seed(271828) np.random.seed(314159)
Using a random number from one RNG to seed the other:
random.seed(42) np.random.seed(random.randint(0, 2 ** 32))
Suggestion : 2
Updated: April 7, 2020
import numpy as np seed = 12345 rng = np.random.default_rng(seed) # can be called without a seed rng.random()
import numpy as np
def stochastic_function(seed, high = 10):
rng = np.random.default_rng(seed)
return rng.integers(high, size = 5)
import numpy as np from joblib import Parallel, delayed def stochastic_function(seed, high = 10): rng = np.random.default_rng(seed) return rng.integers(high, size = 5) seed = 98765 # create the RNG that you want to pass around rng = np.random.default_rng(seed) # get the SeedSequence of the passed RNG ss = rng.bit_generator._seed_seq # create 5 initial independent states child_states = ss.spawn(5) # use 2 processes to run the stochastic_function 5 times with joblib random_vector = Parallel(n_jobs = 2)(delayed( stochastic_function)(random_state) for random_state in child_states) print(random_vector) # rerun to check that we obtain the same outputs random_vector = Parallel(n_jobs = 2)(delayed( stochastic_function)(random_state) for random_state in child_states) print(random_vector)
Suggestion : 3
The best practice is to not reseed a BitGenerator, rather to recreate a new one. This method is here for legacy reasons. This example demonstrates best practice.,This is a convenience, legacy function.,Reseed a legacy MT19937 BitGenerator
>>> from numpy.random import MT19937 >>> from numpy.random import RandomState, SeedSequence >>> rs = RandomState(MT19937(SeedSequence(123456789))) # Later, you want to restart the stream >>> rs = RandomState(MT19937(SeedSequence(987654321)))