【问题标题】:Python numpy - Reproducibility of random numbersPython numpy - 随机数的重现性
【发布时间】:2013-04-25 16:57:35
【问题描述】:

我们有一个非常简单的程序(单线程),我们在其中生成一堆随机样本。为此,我们使用了多次调用numpy 随机函数(如normalrandom_sample)。有时一个随机调用的结果决定了另一个随机函数被调用的次数。

现在我想在一开始就种下一颗种子……我的程序的多次运行应该产生相同的结果。为此,我使用了numpyRandomState 的实例。虽然一开始就是这种情况,但有时结果会变得不同,这就是我想知道的原因。

当我正确地做所有事情,没有并发,因此线性调用函数并且没有涉及其他随机数生成器时,为什么它不起作用?

【问题讨论】:

  • 向我们展示代码!如果没有一个最小的例子来证明你的问题,我们就不太可能有用!
  • 你做的不对。众所周知,numpy 中的 PRNG 是好的。如果您希望我们相信您,请提供一个程序来播种 PRNG,然后在不同的运行中发出不同的输出。否则,它没有发生。

标签: python random numpy prng


【解决方案1】:

好的,大卫是对的。 numpy 中的 PRNG 可以正常工作。在我创建的每个最小示例中,它们都按预期工作。

我的问题是另一个问题,但最后我解决了。不要在确定性算法中循环遍历字典。在调用 .item() 函数进入迭代器时,似乎 Python 对项目进行了任意排序。

所以我对出现这种错误并不感到失望,因为它提醒我们在尝试进行可重现的模拟时应该考虑什么。

【讨论】:

  • 现在您可以确定地循环遍历字典。 “在 3.7 版更改:字典顺序保证为插入顺序。”引用自docs.python.org/3/library/…
【解决方案2】:

如果可重复性对您来说非常重要,我不确定我是否完全相信任何 PRNG 在给定相同种子的情况下始终产生相同的输出。您可能会考虑在一个阶段捕获随机数,将它们保存以供重复使用;然后在第二阶段,重播您捕获的随机数。这是消除不可重现性可能性的唯一方法——它也解决了您当前的问题。

【讨论】:

  • 如果 PRNG 没有为同一个种子产生相同的输出,它就会被破坏。
  • 是的,但实际上它可能会被破坏。或者它不能在操作系统之间一致地移植。或者它在 Python 3 中可能有不同的结果。或或或。我的观点是,如果可重复性很重要,你可以通过记录和回放的方式来保证它。
  • 众所周知,PRNG 很好,没有任何建议表明这只是单个 Python 版本、单个机器。
猜你喜欢
  • 2018-01-09
  • 2013-01-08
  • 1970-01-01
  • 2021-08-05
  • 2019-02-22
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2012-01-20
相关资源
最近更新 更多