python -- np.random.seed()

seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

所以seed总是跟random搭配使用。

作用机制:

设置seed()之后,np,random.random()按顺序产生一组固定的数组,遇到需要随机赋值的变量,就从这个固定的数组中取出对应数目的值赋给变量。
seed(n)的参数n决定了从这个固定数组的什么位置开始取值(个人猜测未找到相关描述),也就是每次遇到seed()之后都会按照后面的参数重新计算取值的起始位置。所以如果每次都调用seed(),那么取得值每次都一样,如下例:

num = 0
while(num<5):
    np.random.seed(2)
    print(np.random.random())
    num+=1

0.43599490214200376
0.43599490214200376
0.43599490214200376
0.43599490214200376
0.43599490214200376
np.random.seed(2)
num = 0
while(num<5):
    print(np.random.random())
    num+=1

0.43599490214200376
0.025926231827891333
0.5496624778787091
0.4353223926182769
0.42036780208748903

这个例子看似好像seed()失效了一样,其实不然,多次运行会发现结果会一直保持这几个数值不会变化,其实这个和上面那个例子主要的区别就是在seed()确定了取值的起始index之后,不仅仅只取一个值,而是在这个固定数组中接连取了5个值。

作用范围:

一旦设置,一直会影响该区域内的随机数。
这里做了个特别有意思的实验来验证这句话:

import numpy as np

A = np.random.randn(1,2)
print("A is:",A)

np.random.seed(2)
B = np.random.randn(1,3)
print("B is:", B)

注意,只在B前面设置了seed(),所以按道理来说每次B取得值都一样,而A应该都不一样,因为A应该是随机的嘛。
运行第一遍:

A is: [[-0.23406678  0.56739342]]
B is: [[-0.41675785 -0.05626683 -2.1361961 ]]

看不出来啥,别着急,继续运行:

A is: [[ 1.64027081 -1.79343559]]
B is: [[-0.41675785 -0.05626683 -2.1361961 ]]

果然B是“固定的”,A是“随机的”,真是这样么,再运行一次确认下:

A is: [[ 1.64027081 -1.79343559]]
B is: [[-0.41675785 -0.05626683 -2.1361961 ]]

去!A也“固定了”???!!!!!

尝试解释一下:第一次运行的时候完全OK,A随机,然后遇到seed(),产生一个固定数组,并由seed(2)中的参数2确定了起始index,叫origin_index吧,接着遇到了需要随机的B,那么就从origin_index开始在固定数组中取3个数给B。接着第二次运行了,注意这时已经有seed()了(它的作用域是多么的强大啊),那么遇到需要随机的A,当前的index是origin_index+3,那么就从这个位置开始,取2个给A。然后又遇到seed,重新计算index=origin_index,接着是B,继续从origin_index开始在固定数组中取3个数给B………………

以上仅为个人观点,如有错误,还望指正,不胜感激!

Python中,np.random.seed是用来设置随机数生成器的种子。种子是一个整数,它决定了随机数生成器的起始状态。当你在代码中设置了相同的种子,随机数生成器将会产生相同的随机数序列。这对于需要可重现的随机性是非常有用的。 举个例子,当你在代码中使用np.random.seed(2),那么在后续的随机数生成中,如果你设置了相同的种子,你将会得到相同的随机数序列。这样可以确保结果的可重现性。 另外,np.random.seed的作用范围是全局的,也就是说,一旦设置了种子,整个程序中的随机数生成都会受到影响。 总结来说,np.random.seed是用来设置随机数生成器的种子,它可以确保随机数的可重现性,并且作用范围是全局的。通过设置相同的种子,你可以获得相同的随机数序列。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python -- np.random.seed()](https://blog.csdn.net/weixin_41043240/article/details/80076844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python np.random.seed直观程序理解](https://blog.csdn.net/dss_dssssd/article/details/82804730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值