我们有一个非常简单的程序(单线程),我们在其中进行一系列随机样本生成。为此,我们使用了几个numpy
随机函数调用(如normal
或random_sample
)。有时,一个随机调用的结果决定了调用另一个随机函数的次数。
现在我想在s.th开头设置种子。我的程序的多次运行应该产生相同的结果。为此,我正在使用numpy
类RandomState
的实例。虽然在一开始就是这种情况,但在某些时候结果会有所不同,这就是我想知道的原因。
当我正确地做所有事情,没有并发性,从而线性调用函数并且没有其他随机数发生器时,为什么它不起作用?
答案 0 :(得分:4)
好的,大卫是对的。 numpy中的PRNG工作正常。在我创建的每个最小的例子中,他们按照预期工作。
我的问题不同,但最后我解决了。永远不要在确定性算法中循环字典。似乎Python在调用.item()函数进入迭代器时任意命令项目。
所以我对这种错误并不感到失望,因为它是一个有用的提醒,提醒我在尝试进行可重复的模拟时要考虑什么。
答案 1 :(得分:-1)
如果再现性对您来说非常重要,我不确定我是否完全相信任何PRNG总是在给定相同种子的情况下产生相同的输出。您可以考虑在一个阶段捕获随机数,保存它们以供重用;然后在第二阶段,重播你捕获的随机数。这是消除不可重现性的唯一方法 - 它也解决了您当前的问题。