播种Python的随机数生成器

时间:2017-02-06 22:13:06

标签: python numpy scipy

我正在使用irand=randrange(0,10)在程序中生成随机数。该随机数生成器在代码中多次使用。在代码的开头,我使用random.seed(1234)启动种子。这是正确的做法吗?

2 个答案:

答案 0 :(得分:4)

在开头播种随机数生成器将确保每次运行代码时都生成相同的随机数。这可能是也可能不是正确的做法'取决于您打算如何使用随机数。

import random

# Initial seeding
random.seed(1234)
[random.randrange(0, 10) for _ in range(10)]
# [7, 1, 0, 1, 9, 0, 1, 1, 5, 3]

# Re-seeding produces the same results
random.seed(1234)
[random.randrange(0, 10) for _ in range(10)]
# [7, 1, 0, 1, 9, 0, 1, 1, 5, 3]

# Continuing on the same seed produces new random numbers
[random.randrange(0, 10) for _ in range(10)]
# [0, 0, 0, 5, 9, 7, 9, 7, 2, 1]

如果您没有在代码的开头播种随机数生成器,那么it is seeded with the current system time将确保每次运行代码时它都会产生不同的随机数。

答案 1 :(得分:2)

正如文档所说,当你使用random.seed时,你有两个选择:

random.seed() - 来自当前时间或来自操作系统特定随机源的种子(如果有)

random.seed(a) - hash(a)用作种子

如果你想在你的程序的两个实例之间使用不同的数字,那么使用time作为种子是更好的做法,但是肯定更难调试。

使用硬编码作为种子使您的随机数更加可预测。