Kevin12151011的个人博客分享 http://blog.sciencenet.cn/u/Kevin12151011

博文

Python随机数生成中的“陷阱”

已有 1835 次阅读 2021-3-7 12:23 |个人分类:Python编程|系统分类:科研笔记

原则上,只要把随机数种子固定,随机数序列就可以复现。但是由于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值下也是不一样的。总之,凡是和生成随机数有关的,不可复现的命令都应该避免。




https://wap.sciencenet.cn/blog-3296568-1275417.html

上一篇:reproject vs montage_wrapper
收藏 IP: 24.218.81.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-8 06:23

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部