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



代码很简单:

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,使用完全相同的参数运行,如果它是种子的,应该总是返回相同的内容。 我错过了什么?

我想你可能误解了种子的用法。以下代码应始终输出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 个输出,但由于您从正态分布中采样,因此每个样本的结果应该不同。

因此,每次运行此程序时,都应始终获得相同的真假序列。

我已经尝试过了,似乎至少可以做到这一点。

最新更新