为什么即使给定固定种子 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 序列。
我试过了,看起来至少是这样。
代码很简单:
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 序列。
我试过了,看起来至少是这样。