为什么即使给定固定种子 numpy.random.Generator.choice 也会给出不同的结果?

Why does numpy.random.Generator.choice gives different results even if given fixed seed?

代码很简单:

import numpy
rng = numpy.random.default_rng(0)
control = rng.choice([0,1],p=[0.5,0.5])
for i in range(100):
    print(control == rng.choice([0,1],p=[0.5,0.5]))
# Not only True gets printed

可能我遗漏了一些东西,但我的理解是 rng.choice、运行 具有完全相同的参数,如果它被播种,应该总是 return 相同的东西. 我错过了什么?

我想你可能误解了种子的用法。以下代码应始终输出 True:

import numpy
rng = numpy.random.default_rng(0)
control = rng.choice([0,1],p=[0.5,0.5])
for i in range(100):
    rng = numpy.random.default_rng(0)
    print(control == rng.choice([0,1],p=[0.5,0.5]))
# Always True

当我们使用相同的种子时,我们可以得到相同的序列随机数。这意味着:

import numpy
rng = numpy.random.default_rng(0)
out = [rng.choice([0, 1], p=[0.5, 0.5]) for _ in range(10)] 

无论什么时候运行,out 都应该相同,但是out 中的值不同。

据我了解随机数生成,每次 运行 使用相同种子的程序时,您应该得到相同的 100 个输出,但是由于您从正​​态分布中采样,因此每个样本的结果应该与众不同。

所以每次你 运行 这个程序时,你应该总是得到相同的 true 和 false 序列。

我试过了,看起来至少是这样。