我读到,如果您指定种子值,它会生成相同的随机数。在下面的代码中,虽然我指定了种子值,但在 for 循环中 rf 正在生成不同的随机值。但是,如果我省略 for 循环并运行此代码两次,则 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)
Run Code Online (Sandbox Code Playgroud)
是的。当您调用 时random.seed(),它会设置随机种子。从那时起您生成的数字序列将始终相同。
问题是,您只设置一次种子,然后调用np.random.uniform()三次。这意味着您将从您的 中获取接下来的三个数字random.seed()。当然它们是不同的 \xe2\x80\x93 你还没有重置之间的种子。但是每次运行该程序时,您都会得到相同的三个数字序列,因为您在生成所有数字之前将种子设置为相同的值。
设置种子只会影响下一个要生成的随机数,因为伪随机数生成(np.random使用)的工作原理是:它使用种子确定性地生成新的随机数,然后使用生成的数字设置新的种子为下一个数字。它实际上归结为获得一个非常非常长的随机数序列,这些随机数最终会重复自身。当您设置种子时,您将跳转到该序列 \xe2\x80\x93 中的指定点,但您不会将代码保留在那里。
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |