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

era*_*ran 58 python random numpy

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

import numpy as np
np.random.seed(1234)
Run Code Online (Sandbox Code Playgroud)

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

ask*_*han 68

如果要设置调用的种子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]])
Run Code Online (Sandbox Code Playgroud)

如果要使用该类,则必须保存使用种子启动的类的实例:

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

并且它像以前一样保持状态:

r.rand(2,3)
#array([[ 0.27259261,  0.27646426,  0.80187218],
#       [ 0.95813935,  0.87593263,  0.35781727]])
Run Code Online (Sandbox Code Playgroud)

您可以看到"全局"类的状态

np.random.get_state()
Run Code Online (Sandbox Code Playgroud)

和你自己的类实例

r.get_state()
Run Code Online (Sandbox Code Playgroud)

  • 你的回答很有道理。但是文档如何不令人困惑?`该方法在 RandomState 初始化时调用。可以再次调用它来重新播种生成器。` 它没有说明这样一个事实,即当我调用这个方法时,我只影响一个全局实例(或其他),而不影响任何其他 `RandomState` 实例。 (4认同)
  • 是的,我同意..`numpy.random`模块文档应该清楚地说明模块是否有效地初始化了`RandomState`的实例.但是我找不到任何关于模块本身的文档. (2认同)

Fre*_*Foo 9

>>> 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])
Run Code Online (Sandbox Code Playgroud)

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

>>> 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])
Run Code Online (Sandbox Code Playgroud)


Bru*_*elb 8

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

来自numpy docs:

numpy.random.seed(seed=None)
Run Code Online (Sandbox Code Playgroud)

种子发电机.

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

class numpy.random.RandomState
Run Code Online (Sandbox Code Playgroud)

Mersenne Twister伪随机数发生器的容器.