Python np.random.seed()和np.random.RandomState()之间的差异

Python np.random.seed()和np.random.RandomState()之间的差异,python,numpy,random,Python,Numpy,Random,我知道,要播种numpy.random的随机性,并能够复制它,我应该让我们: import numpy as np np.random.seed(1234) 但是什么呢 np.random.RandomState() do?是一种填充容器的方法 从numpy文档: numpy.random.seed(seed=None) 给发电机播种 初始化RandomState时调用此方法。可以再次调用它以重新为生成器设定种子。有关详细信息,请参见RandomState Mersenne Twister伪

我知道,要播种numpy.random的随机性,并能够复制它,我应该让我们:

import numpy as np
np.random.seed(1234)
但是什么呢
np.random.RandomState()
do?

是一种填充容器的方法

从numpy文档:

numpy.random.seed(seed=None)
给发电机播种

初始化RandomState时调用此方法。可以再次调用它以重新为生成器设定种子。有关详细信息,请参见RandomState

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


如果要设置调用
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()

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])
np.random.RandomState()-提供基于不同概率分布的多种方法的类。

np.random.RandomState.seed()-初始化RandomState()时调用。

但如果调用RandomState(1234)并使用random.uniform()创建一个数字,则结果不可复制。像RandomState这样的容器是用来做什么的?@eran你知道吗,它们不是一回事?请阅读以了解更多关于确切的内容。@eran,实际上这是因为您正在创建该类的另一个实例。看看我的答案,看看如何使用它。谢谢!我现在明白了。非常直截了当。文档只是缺少一个合适的例子。或者我有一个盲点…它对独立功能有什么影响?我认为它创建了一个独立的实例,就像我的回答一样。@askewchan:typo,我的意思是它没有任何效果。你的回答有道理。但是文档如何不令人困惑呢<代码>初始化RandomState时调用此方法。可以再次调用它来重新为生成器设定种子。它没有说明这样一个事实,即当我调用此方法时,我只影响一个全局实例(或其他任何实例),而不影响任何其他
RandomState
实例。是的,我同意。。
numpy.random
模块文档应明确说明模块已使用
RandomState
的实例进行初始化。但是我找不到任何关于模块本身的文档。另请看:这里有一个非常好的讨论:你真的必须费力地阅读评论,并注意到Robert Kern是一个numpy devWelcome!谢谢你花时间回答这个问题。你能详细介绍一下你的解决方案吗?例如,为什么您的解决方案比公认的答案更好?此外,这个问题是6年前提出和回答的。回答时一定要看原始问题的日期。请阅读。
>>> 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])