在python中设置随机种子程序

时间:2012-07-17 16:36:59

标签: python random seed

我有一个相当大的程序,我在不同文件中使用random模块中的函数。我希望能够在一个地方设置一次随机种子,使程序始终返回相同的结果。甚至可以在python

中实现

7 个答案:

答案 0 :(得分:90)

运行的主要python模块应该import random并调用random.seed(n) - 只要其他地方没有重置种子,就会在所有其他random导入之间共享。< / p>

答案 1 :(得分:15)

zss的评论应突出显示为实际答案:

  

人们要小心的另一件事:如果你正在使用   numpy.random,那么你需要使用numpy.random.seed()来设置   种子。使用random.seed()不会为随机数设置种子   从numpy.random生成。这困惑了我一段时间。 -zss

答案 2 :(得分:8)

在应用程序开始时调用random.seed(x),确保x始终相同。这将确保在每次运行应用程序时,伪随机数序列将是相同的。

答案 3 :(得分:2)

Jon Clements几乎回答了我的问题。然而,这不是真正的问题: 事实证明,我的代码随机性的原因是numpy.linalg SVD,因为它对于条件差的矩阵并不总是产生相同的结果!!

因此,如果您遇到同样的问题,请务必在代码中检查一下!

答案 4 :(得分:1)

基于先前的答案:请注意,即使所有种子都受到控制,许多构造也可以使执行路径有所不同。

我当时想“ 我设置好种子,使它们始终相同,并且没有更改/外部依赖关系,因此我的代码的执行路径应始终相同”,但这是错误的。

咬我的示例是list(set(...)),其结果顺序可能有所不同。

答案 5 :(得分:0)

一个重要的警告是,对于3.7之前的python版本,Dictionary键不是确定性的。这会导致程序中的随机性,甚至导致生成随机数的顺序不同,从而导致不确定的随机数。结论更新python。

答案 6 :(得分:-12)

您可以使用自己的随机数生成器轻松保证这一点。

选择三个较大的素数(假设这不是加密应用程序),并将它们插入a,b和c: a =((a * b)%c) 这给出了一个产生相当随机数据的反馈系统。请注意,并非所有素数都能同样有效,但如果您只是进行模拟,则无关紧要 - 对于大多数模拟而言,您真正需要的是数字混乱,模式(伪随机,记忆)复杂到足以它与您的应用程序在某种程度上不匹配。

Knuth谈到这一点。