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


Answers:


88

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

2
您的回答很有道理。但是如何使文档不引起混淆?This method is called when RandomState is initialized. It can be called again to re-seed the generator.当我调用此方法时,我只影响一个全局实例(或其他任何实例),而不影响其他RandomState实例。
最大

2
是的,我同意..numpy.random模块文档应明确声明该模块实际上是使用的实例进行初始化的RandomState。但是我找不到关于模块本身的任何文档。
askewchan '16

11

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

它对独立功能有什么影响?我认为它像我的回答一样创建了一个独立的实例。
askewchan 2014年

@askewchan:错字,我的意思是没有任何作用。
Fred Foo 2014年

8

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

来自numpy文档:

numpy.random.seed(seed=None)

播种发电机。

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

class numpy.random.RandomState

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


1
但是,如果我调用RandomState(1234)并使用random.uniform()创建一个数字,则结果将无法重现。诸如RandomState之类的容器用于什么用途?
eran 2014年

1
@eran您确实意识到Mersenne捻线机均匀分布不是一回事吗?请阅读此内容,以了解更多有关random.RandomState的确切信息。
Bruno Gelb 2014年

1
@eran,实际上是因为您正在创建该类的另一个实例。查看我的答案以了解如何使用它。
askewchan 2014年

1
谢谢!我现在明白了 非常简单。该文档只是缺少适当的示例。或者我有一个盲点...
eran 2014年

0

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


欢迎来到SO!感谢您抽出宝贵的时间回答这个问题。您能否提供有关您的解决方案的更多详细信息?例如,为什么您的解决方案比公认的答案更好?另外,这个问题是在6年前提出并回答的。回答时,请务必查看原始问题的日期。请阅读“如何回答”
above_c_level
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.