为什么即使指定了种子值也会生成不同的随机数?

时间:2018-09-10 02:56:18

标签: python numpy

我读到,如果指定种子值,它将生成相同的随机数。在以下代码中,尽管我指定了种子值,但在for循环中,RF生成了不同的随机值。但是,如果我省略循环并运行此代码两次,则rf会生成相同的随机值。有人可以解释一下为什么会这样吗?

SEED= 1234567
s=np.random.seed(SEED)
print(s)
for i in range(3):
   rf=np.random.uniform(-1.0,1.0,(3,4))
   print(rf)

1 个答案:

答案 0 :(得分:3)

是的。调用random.seed()时,它会设置随机种子。从此以后产生的数字顺序将始终相同。

问题是,您只设置了一次种子,然后调用了np.random.uniform() 3次。这意味着您将从random.seed()中获取接下来的三个数字。当然,它们是不同的–您尚未在两者之间重置种子。但是每次运行该程序,您都会得到相同的三个数字序列,因为在生成所有数字之前,您将种子设置为同一对象。

设置种子仅会影响要生成的下一个随机数,这是因为伪随机数生成(np.random使用)的工作原理:它使用种子确定性地生成新的随机数,然后使用生成的数字,为下一个数字设置新的种子。它有效地归结为一个真正非常长的随机数序列,该序列最终会重复出现。设置种子时,您将按该顺序跳至指定点-但是,您并未将代码保留在那里。