numpy.random.seed函数的内部作用机制/作用原理——一个固定序列,依次生成。

一、背景

numpy.random.seed函数在网上有很多文章都被讲解过,但是还是没有讲到核心,没把更深层次的作用机理讲出来。

二、生活中的比喻

1.1取扑克牌

假设某厂在不同时间点生产不同型号的扑克牌,每一种型号的扑克对应的每一盒从上到下的排序相同;以型号A为例,每一盒从上到下的排列顺序是123456789...。

我现在给你一盒这种型号A的扑克,让你从上到下依次取出,第一次取出1,第二次取出2后。

再给你一盒型号A扑克牌,再第一次取出1,第二次取出2。

1.2建立关联

(1)在不同时间生产不同型号的扑克牌,也即如果甲方不指定型号,生成的扑克牌顺序就和时间有关。

(2)不同型号的扑克牌排列顺序不同,也即不同数值的seed对应的序列不同。

(3)(重新)给你一幅型号A扑克牌让你取,也即(重新)应用一次numpy.random.seed(A)再取随机数。

(4)只要不再(重新)给你一幅新的型号A扑克牌,那么你只能接着上次取完的顺序继续;也即numpy.random.seed(A)的作用不是只有一次,而是一直持续,后面取随机数的序列固定不变,如果numpy.random.seed(9)对应的序列是123456789,第一次生成随机数是1,第二次生成随机数前虽然不再次执行umpy.random.seed(9),也会受它的影响而生成2。

三、具体代码示意

import numpy as np

np.random.seed(3)
for i in range(5):
    print(np.random.rand())

np.random.seed(3)
print(np.random.rand(5))
# 0.5507979025745755
# 0.7081478226181048
# 0.2909047389129443
# 0.510827605197663
# 0.8929469543476547
# [0.5507979  0.70814782 0.29090474 0.51082761 0.89294695]

看没看到?中间的代码块,只执行一次random.seed,依次取出的序列和后面一次性取出5个的序列数值大小相同(忽略精度影响)。 

所以,别说random.seed只作用一次了,它会作用到程序执行结束,会作用到下一次random.seed出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值