I am waiting for another developer to finish a piece of code that will return an np array of shape (100,2000) with values of either -1,0, or 1.
In the meantime, I want to randomly create an array of the same characteristics so I can get a head start on my development and testing. The thing is that I want this randomly created array to be the same each time, so that I'm not testing against an array that keeps changing its value each time I re-run my process.
I can create my array like this, but is there a way to create it so that it's the same each time. I can pickle the object and unpickle it, but wondering if there's another way.
r = np.random.randint(3, size=(100, 2000)) - 1
Create your own instance of numpy.random.RandomState()
with your chosen seed. Do not use numpy.random.seed()
except to work around inflexible libraries that do not let you pass around your own RandomState
instance.
[~]
|1> from numpy.random import RandomState
[~]
|2> prng = RandomState(1234567890)
[~]
|3> prng.randint(-1, 2, size=10)
array([ 1, 1, -1, 0, 0, -1, 1, 0, -1, -1])
[~]
|4> prng2 = RandomState(1234567890)
[~]
|5> prng2.randint(-1, 2, size=10)
array([ 1, 1, -1, 0, 0, -1, 1, 0, -1, -1])
Simply seed the random number generator with a fixed value, e.g.
numpy.random.seed(42)
This way, you'll always get the same random number sequence.
This function will seed the global default random number generator, and any call to a function in numpy.random
will use and alter its state. This is fine for many simple use cases, but it's a form of global state with all the problems global state brings. For a cleaner solution, see Robert Kern's answer below.
I just want to clarify something in regard to @Robert Kern answer just in case that is not clear. Even if you do use the RandomState
you would have to initialize it every time you call a numpy random method like in Robert's example otherwise you'll get the following results.
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> prng = np.random.RandomState(2019)
>>> prng.randint(-1, 2, size=10)
array([-1, 1, 0, -1, 1, 1, -1, 0, -1, 1])
>>> prng.randint(-1, 2, size=10)
array([-1, -1, -1, 0, -1, -1, 1, 0, -1, -1])
>>> prng.randint(-1, 2, size=10)
array([ 0, -1, -1, 0, 1, 1, -1, 1, -1, 1])
>>> prng.randint(-1, 2, size=10)
array([ 1, 1, 0, 0, 0, -1, 1, 1, 0, -1])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With