||
原则上,只要把随机数种子固定,随机数序列就可以复现。但是由于python中有些命令本身不可复现,与之相关的随机数生成过程也可能改变随机数生成过程,从而使得结果不可复现,比如把如下命令写入脚本a.py:
--------------------------------------------------
import numpy as np
np.random.seed(0)
a = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for name in a.keys(): # or ’for name in a:‘
print(name)
a[name] = np.random.rand()
print(a)
--------------------------------------------------
在终端反复执行‘python a.py’,会发现name和a输出结果不总是一样,这是因为a.keys()的结果不总是一样。另如,如果循环内的语句改变了循环次数或顺序,也会使随机数结果不可复现:
for i in range(10):
if i in [1,2,3]:
continue
print(np.random.rand())
若将上述脚本中的“if i in [1,2,3]: continue“注释掉,随机数结果即便在相同的i值下也是不一样的。总之,凡是和生成随机数有关的,不可复现的命令都应该避免。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-24 23:31
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社