python中random.seed(1)_Python-random.seed()

写在前面的话:

第一次在该平台写东西,而且还是写自己不熟悉的东西哈哈哈。

最近不知道为什么突然对Python很感兴趣,以致于在大后天就要考试的此刻还是想来码一篇关于Python的random.seed()的一点粗鄙的心得。

可能以后我的一些想法、学习心得、日常记录或者是王者高光时刻(哈哈哈)都会在这里记录,算是对自己的一个印刻,便于以后的回忆。

好了不说废话了,对random.seed()的理解通过举例子的方式是最方便的了,先看几个例子:

例子1.1:

#代码

import numpy as np

np.random.seed()

for i in range(3):

print (np.random.random())

#结果(随机的)

0.46632459310108043

0.7544383753815331

0.39086069153119374

例子1.2:

#代码

import numpy as np

for i in range(3):

print (np.random.random())

#结果(随机的)

0.08574135682064832

0.8770426494456602

0.25749265725314274

以上两个例子告诉我们,如果你不对random.seed()传入参数,那写不写random.seed()这行代码都是一样的,程序照样对random.random()进行随机取值(从[0,1)区间随机取值)。

例子2.1:

#代码

import numpy as np

np.random.seed(1)

for i in range(3):

print (np.random.random())

#结果

0.417022004702574

0.7203244934421581

0.00011437481734488664

例子2.2:

#代码

import numpy as np

np.random.seed(1)

for i in range(5):

print (np.random.random())

#结果

0.417022004702574

0.7203244934421581

0.00011437481734488664

0.30233257263183977

0.14675589081711304

显然,例子2.2结果中的前三个数和例子2.1的三个数是完全一样的。原因是都设置了random.seed(1)。当你传入一个参数(这里是1)进去random.seed()中时,它会对后面的随机数的取值进行一个初始化(具体是如何初始化的,我问过Python玩得比较好的同学,他们讲到了伪随机数的概念,有兴趣的可以深究),并形成一个序列,这个序列里的数据是定了的。所以当例2.2设置5次循环时,前3次的结果和例2.1是一模一样的,因为这个序列是已经确定了的。有兴趣的可以循环10次,可以发现循环10次的结果的前5次数据和例2.2是一样的。

例子3.1:

#代码

import numpy as np

np.random.seed(1)

for i in range(3):

print (np.random.random())

#结果

0.417022004702574

0.7203244934421581

0.00011437481734488664

例子3.2:

#代码

import numpy as np

np.random.seed(2)

for i in range(3):

print (np.random.random())

#结果

0.43599490214200376

0.025926231827891333

0.5496624778787091

以上两例告诉我们,当你传入不同的参数(例3.1是1;例3.2是2)后,形成的这个序列是不一样的。

例子4.1:

#代码

import numpy as np

np.random.seed(1)

for i in range(3):

print (np.random.random())

#结果

0.417022004702574

0.7203244934421581

0.00011437481734488664

例子4.2:

#代码

import numpy as np

for i in range(3):

np.random.seed(1)

print (np.random.random())

#结果

0.417022004702574

0.417022004702574

0.417022004702574

以上两例可以看出random.seed()放在循环外面或是里面的区别:放在循环外面时(例4.1),在3次循环前,random.random()随机数的取值序列就定了,因此3个结果就是这个序列的第1、2、3个位置的数据;放在循环里面时(例4.2),循环1次,random.seed(1)调用一次,确定一个取值序列,而对于3次循环而言,random.seed(1)调用了3次,并且这3次循环都是同一个随机数序列,所以结果中的3个数是一样的(都是这个随机数序列的第1个数值)。

大多情况下应该都不需要设置random.seed(),如例1.2。当不设置random.seed()时,程序会根据系统时间来初始化随机数序列,因此你在不同时候调用random.random()时,都是不同的随机数序列。原因是在调用的时候,时间肯定都是不同的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值