【问题标题】:Why does numpy RandomState gives different results?为什么 numpy RandomState 会给出不同的结果?
【发布时间】:2021-08-26 12:26:05
【问题描述】:

我不明白为什么

import numpy as np
rng = np.random.RandomState(42)
rng.randint(10, size=1)
np.random.RandomState(rng.randint(10, size=1)).randint(10, size=3)

>>> OUTPUT: array([8, 9, 3])

import numpy as np
np.random.RandomState(42).randint(10, size=1)
np.random.RandomState(np.random.RandomState(42).randint(10, size=1)).randint(10,size=3)
>>> OUTPUT: array([9, 3, 4])

有人可以解释一下区别吗?

【问题讨论】:

  • random 应该生成随机数。你的问题到底是什么?如果您希望每次必须设置seed 时都生成相同的随机数集。 more information
  • 在您的第一段代码中,您在第 3 行生成一个随机整数,然后在第 4 行再次生成。注释第 3 行,您将得到相同的输出。
  • @not_speshal 谢谢!我想我现在明白了,运行 rng.randint(10, size=1 应该总是返回完全相同的数字。

标签: python numpy random random-seed


【解决方案1】:

阅读前请注意:请注意,以下“随机”一词的所有实例均表示“伪随机”。

简单的答案是因为您使用不同的种子进行不同的调用和后续操作。

在您提供的示例中

import numpy as np
rng = np.random.RandomState(42)
rng.randint(10, size=1) # This is the first time you are asking 'rng' for 'randint()' with seed 42 which will return 6. First Random Number.
np.random.RandomState(rng.randint(10, size=1)).randint(10, size=3) # This is the second time you are asking the same 'rng' for 'randint()' with seed 42 which will return 3. Second Random Number.

在您提供的第二个示例中,

import numpy as np
np.random.RandomState(42).randint(10, size=1) # this is the first np.random.RandomState(42).randint(), which is 6, same as above
np.random.RandomState(np.random.RandomState(42).randint(10, size=1)).randint(10,size=3) # this is still the first np.random.RandomState(42).randint() , which is 6 again, but it was 3 above

文档中说明的兼容性保证是这样的:

Compatibility Guarantee

使用固定种子的固定位生成器和使用相同参数对“RandomState”方法的一系列固定调用将始终产生相同的结果,直至舍入误差,除非值不正确。 RandomState 被有效地冻结,并且只会接收 Numpy 内部更改所需的更新。包括算法改进在内的更多实质性更改将留给 Generator。

表示当你使用同一个种子时,会提供同一系列的数字,即np.random.RandomState(42)的构造函数初始化后的第一个随机数永远是6,第二个随机数永远是3因为您要求一个随机值。

通过运行验证。

import numpy as np
rng = np.random.RandomState(42)
print(rng.randint(10, size=1)) # output is always [6]
print(rng.randint(10, size=1)) # output is always [3]

我希望这能回答你的问题。

【讨论】:

  • 感谢您的回复!现在我想我明白 RandomState 的实际工作原理了。
猜你喜欢
  • 2012-06-09
  • 2014-02-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多