# Difference between np.random.seed() and np.random.RandomState()

I know that to seed the randomness of numpy.random, and be able to reproduce it, I should us:

``````import numpy as np
np.random.seed(1234)
``````

but what does
`np.random.RandomState()`
do?

## Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

### Solution 1

If you want to set the seed that calls to `np.random...` will use, use `np.random.seed`:

``````np.random.seed(1234)
np.random.uniform(0, 10, 5)
#array([ 1.9151945 ,  6.22108771,  4.37727739,  7.85358584,  7.79975808])
np.random.rand(2,3)
#array([[ 0.27259261,  0.27646426,  0.80187218],
#       [ 0.95813935,  0.87593263,  0.35781727]])
``````

Use the class to avoid impacting the global numpy state:

``````r = np.random.RandomState(1234)
r.uniform(0, 10, 5)
#array([ 1.9151945 ,  6.22108771,  4.37727739,  7.85358584,  7.79975808])
``````

And it maintains the state just as before:

``````r.rand(2,3)
#array([[ 0.27259261,  0.27646426,  0.80187218],
#       [ 0.95813935,  0.87593263,  0.35781727]])
``````

You can see the state of the sort of ‘global’ class with:

``````np.random.get_state()
``````

and of your own class instance with:

``````r.get_state()
``````

### Solution 2

`np.random.RandomState()` constructs a random number generator. It does not have any effect on the freestanding functions in `np.random`, but must be used explicitly:

``````>>> rng = np.random.RandomState(42)
>>> rng.randn(4)
array([ 0.49671415, -0.1382643 ,  0.64768854,  1.52302986])
>>> rng2 = np.random.RandomState(42)
>>> rng2.randn(4)
array([ 0.49671415, -0.1382643 ,  0.64768854,  1.52302986])
``````

### Solution 3

random.seed is a method to fill random.RandomState container.

from numpy docs:

``````numpy.random.seed(seed=None)
``````

Seed the generator.

This method is called when RandomState is initialized. It can be called again to re-seed the generator. For details, see RandomState.

``````class numpy.random.RandomState
``````

Container for the Mersenne Twister pseudo-random number generator.

### Solution 4

np.random.RandomState() – a class that provides several methods based on different probability distributions.
np.random.RandomState.seed() – called when RandomState() is initialised.

### Solution 5

`Seed` is a global pseudo-random generator. However, `randomstate` is a pseudo-random generator isolated from others, which only impact specific variable.

``````rng = np.random.RandomState(0)
rng.rand(4)
# Out: array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
rng = np.random.RandomState(0)
rng.rand(4)
# Out: array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
``````

It’s basically as same as `Seed`, but as the following, We don’t assign randomstate to a variable.

``````np.random.RandomState(0)
# Out: <mtrand.RandomState at 0xddaa288>
np.random.rand(4)
# Out: array([0.62395295, 0.1156184 , 0.31728548, 0.41482621])
np.random.RandomState(0)
# Out: <mtrand.RandomState at 0xddaac38>
np.random.rand(4)
# Out: array([0.86630916, 0.25045537, 0.48303426, 0.98555979])
``````

The latter is different from the former. It means that randomstate only avails inside specific variable.

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0