np.random.seed()和np.random.RandomState()之间的区别

时间:2014-04-10 17:00:31

标签: python numpy random

我知道要播种numpy.random的随机性,并且能够重现它,我应该:

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

但是做什么 np.random.RandomState() 办?

5 个答案:

答案 0 :(得分:58)

如果您要设置调用np.random...的种子将使用,请使用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]])

使用该类以避免影响全局numpy状态:

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

它和以前一样维持着状态:

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

您可以使用以下命令查看“全局”类的状态:

np.random.get_state()

以及您自己的类实例:

r.get_state()

答案 1 :(得分:8)

random.seed是一种填充random.RandomState容器的方法。

来自numpy docs的

numpy.random.seed(seed=None)
  

种子发电机。

     

初始化RandomState时调用此方法。可以再次调用它来重新生成发电机。有关详细信息,请参阅RandomState。

class numpy.random.RandomState
  

Mersenne Twister伪随机数生成器的容器。

答案 2 :(得分:7)

np.random.RandomState()构造一个随机数生成器。它对np.random中的独立函数没有任何影响,但必须明确使用:

>>> 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])

答案 3 :(得分:0)

np.random.RandomState()-提供基于不同概率分布的几种方法的类。
np.random.RandomState.seed()-初始化RandomState()时调用。

答案 4 :(得分:0)

Seed 是一个全局伪随机生成器。然而,randomstate 是一个与其他人隔离的伪随机生成器,它只影响特定的变量。

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

Seed基本一样,但如下,我们不给变量赋值。

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

后者与前者不同。这意味着 randomstate 仅在特定变量内有效。