Python 为什么numpy RandomState会给出不同的结果?

Python 为什么numpy RandomState会给出不同的结果?,python,numpy,random,random-seed,Python,Numpy,Random,Random Seed,我不明白为什么 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
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
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
文件中规定的兼容性保证如下:

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

这意味着当您使用相同的种子时,将提供相同的数字序列,即
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]

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

random
应该生成随机数。你的问题到底是什么?如果希望每次都生成相同的随机数集,则必须设置
种子
。在第一段代码中,在第3行生成一个随机整数,然后在第4行生成一个随机整数。注释第3行,两行的输出相同。@not_speshal谢谢!我想我现在明白了,运行
rng.randint(10,size=1
应该总是返回完全相同的数字。谢谢你的回复!现在我想我明白了RandomState实际上是如何工作的了。
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]