Python随机数种子(random(seed)的使用)

在科学技术和机器学习等其他算法相关任务中,我们经常需要用到随机数,本文就详细的介绍一下Python随机数种子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Python随机数种子(random,seed)的使用,久久派带你了解更多相关信息。

目录
  • 1. 随机数种子
  • 2. numpy中的随机数种子
  • 3. 随机数“顺序”的奥秘

在科学技术和机器学习等其他算法相关任务中,我们经常需要用到随机数,为了把握随机数的生成特性,从随机数的随机无序中获得确定和秩序。我们可以利用随机数种子(random seed)来实现这一目标,随机数种子,可以使得引入了随机数的整个程序,在多次运行中得到确定的,一致的结果。

很多博文谈到随机数种子,只是简单论及,利用随机数种子,可以每次生成相同的随机数。想真正用好掌握它,对此很容易产生疑惑,生成相同的随机数数怎么个相同法?随机数种子又作何用处?

1. 随机数种子

下面我们从实例中揭开随机数种子的神秘面纱:

import random# print(help(random))def test_random_seed_in_std_lib(seed=0, cnt=3):    random.seed(seed)    print(\"test seed: \", seed)    for _ in range(cnt):        print(random.random())        print(random.randint(0,100))        print(random.uniform(1, 10))        print(\'\\n\')test_random_seed_in_std_lib()test seed:  00.8444218515250481979.012195287534180.04048437818077755655.3733492690653140.9182343317851318389.710199954281542test_random_seed_in_std_lib()test seed:  00.8444218515250481979.012195287534180.04048437818077755655.3733492690653140.9182343317851318389.710199954281542test_random_seed_in_std_lib(99)test seed:  990.40397807494366633256.394951906868970.23026272839629136177.83889692857270150.2511510083752201495.777313434770537

通过两次运行以上程序,我们得到相同的结果,这说明了以下几点:

  1. 在确定了一次随机数种子后,随机数函数,无论任何分布任何类型,在多次重复调用中(for循环)生成的随机数不同;
  2. 当再次声明相同的随机数种子时(第二次调用test_random_seed_in_std_lib函数,random.seed(seed)这一行),随机数将从“头”开始, 按相同的顺序生成随机数。这里的“头”,即是random.seed(seed)声明后,随机数函数的首次调用;
  3. 若指定不同的随机数种子(seed=99),无论任何随机数函数,生成的随机数将不同于,之前的(随机数种子为0)的运行结果。
  4. 上面的几点解释了随机数种子可以使得每次生成相同随机数的具体含义。这里的相同,其实还有一种更普遍的内涵,即环境独立和跨平台。上面的实验,在任何电脑或主机,运行以上代码,可以复现完全一致的结果。

以上几点囊括了随机数种子的基本特性,下面我们来对numpy中的随机数种子作进一步的拓展研究。

2. numpy中的随机数种子

import numpy as npdef test_numpy_random_seed(seed=0, cnt=3):    np.random.seed(seed)    print(\"test numpy seed: \", seed)    for _ in range(cnt):        print(np.random.random())        print(np.random.randn(1, 5))        print(np.random.uniform(1, 10, 5))        print(\'\\n\')

多次运行以上的test_numpy_random_seed函数,你可以观察到与使用random模块时相似的情形,进一步验证了我们总结的关于随机数种子的特性。

此外,我们可以对多维随机数组做一些有益的探索:

def test_mult_shape(seed=0):    np.random.seed(seed)    print(np.random.randn(1, 3))    print(np.random.randn(1, 2))    np.random.seed(seed)    print(np.random.randn(2, 5))test_mult_shape()[[1.76405235 0.40015721 0.97873798]][[2.2408932  1.86755799]][[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799] [-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]

运行test_mult_shape函数,我们发现,设定相同的随机数组,两次运行两个一行的多维正态分布的结果,与一次运行两行的多维正态分布的结果的第一行完全相同。

这个结果,说明了对相同类型的随机数分布,形状特征不会影响分布的生成秩序,程序中,np.random.randn(1, 2),这一行不像是第二次运行多维正态分布的随机数组,它\”几乎\”是后缀于它的前一行一次性生成的。

3. 随机数“顺序”的奥秘

至此,我们对随机数生成顺序有了初步印象,但是这里的顺序,其实比我们的朴素观察更复杂,我们来进一步考察这一点。

def test_numpy_random_seed_order(seed=0):    np.random.seed(seed)    print(np.random.random())    # print(np.random.randint(1, 10))    print(np.random.randn(1, 5))    np.random.seed(seed)    print(np.random.randn(2, 5))test_numpy_random_seed_order()0.5488135039273248[[ 0.74159174  1.55291372 -2.2683282   1.33354538 -0.84272405]][[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799] [-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]

运行以上程序,我们看到,设定了相同的随机数种子,np.random.randn(1, 5)看起来是第一次运行多维正态分布数组,实际上并不是,np.random.randn(2, 5)才是真正的第一次运行多维正态分布随机数组。

这说明,前面的np.random.random()对np.random.randn产生了干扰,使得这次正态分布的随机数组中的任何一个数,都不在np.random.randn(2, 5)中,这样它显示了一种不可把握的随机性。

我们可以把这一点考察得更加深入一点:

def test_numpy_random_seed_order_further(seed=0, randint_high=10):    np.random.seed(seed)    print(np.random.randint(1, randint_high))    print(np.random.randn(1, 5))    np.random.seed(seed)    print(np.random.randn(2, 5))test_numpy_random_seed_order_further()6[[ 0.11849646  0.11396779  0.37025538  1.04053075 -1.51698273]][[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799] [-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]test_numpy_random_seed_order_further(randint_high=5)1[[ 1.12279492  0.30280522  0.07085926  0.07304142 -1.42232584]][[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799] [-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]

紧接上面对随机数干扰项对考察,我们看到,这次我们改变了干扰项随机数生成器,np.random.randn(1, 5)的生成结果不同于test_numpy_random_seed_order中同一行的运行结果。

另外,两次设置不同的randint的右边界,np.random.randn(1, 5)生成的结果也全然不同,这说明了np.random.randint设置不同的参数,即是全然不同的随机数发生器。这一点,也不难在其他类型的随机数分布中得到验证。

到此这篇关于Python随机数种子(random seed)的使用的文章就介绍到这了,更多相关Python随机数种子内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/7236.html

(0)
上一篇 2021-07-29 03:12:19
下一篇 2021-07-29 03:12:21

相关推荐

  • 云南虫谷第6集免费完整版(第六集剧情介绍都说了什么内容?)

    云南虫谷第6集高清在线免费完整版第六集剧情介绍都说了什么内容?!还未等王胖子把话说完,Shirley杨将他们叫去,只见杨老爷子尸体旁边,竟有一块与众不同的石头,上面雕刻几条蛇形图案,胡八一用手触碰后,竟自动开启八只蟾蜍石像。山神庙里凭空出

    2021-09-19
    2970
  • 王菲是个怎样的人(王菲李亚鹏离婚原因)

    王菲李亚鹏为什么离婚呢?我们来了解一下吧。首先来回顾两人的离婚经过。2013日下午19时30分左右,王菲新浪微博发文:“这一世,夫妻缘尽至此。我还好,你也保重。”疑似王菲与李亚鹏离婚后发出感言。随后20时08分央视新闻新浪官方微博证实了二人

    2021-12-15
    1250
  • 汪顺的奥运金牌也掉皮了(专家称涂膜出问题:网友吐槽日本制造)

    奥运金牌纷纷掉漆这件事,引起了众网友的热议,日本制造也不过如此吗?早些时候,朱雪莹在个人微博上发问“你们的奖牌…也能抠掉一层皮吗?”她说,自己没有故意抠金牌,因为

    2021-08-25
    3690
  • 外机飞行员摆不友好手势 解放军驱离 ! 中国飞行员干得漂亮!

    外机飞行员摆不友好手势,解放军驱离。中国飞行员干得漂亮!海军舰载航空兵某部副参谋长宋广政公开表示:外军舰机经常抵近侦察、干扰挑衅,每次驱离都是一场战斗。“当时,目视到对方飞行员不友好的手势,多次警告驱离,但对方仍未改变航向,直到我继续逼近至不到100米的距离,他感到压力才被迫撤离。过去在家门口,我们

    2023-04-23
    00
  • 学生遭银行多开账户涉事13人被追责(到底发生了什么)

    学生遭银行多开账户涉事13人被追责,针对“广西崇左幼儿师范高等专科学校1457名学生在不知情的情况下被开立Ⅱ、Ⅲ类电子账户”一事,中国农业银行广西分行于12月16日通报:经调查后确认,此事件系该

    2021-12-17
    2290
  • 中戏艺考女生全国第一曝光 网友:美 !“很有辨识度” !

    这两天,国内艺术类院校陆续公布今年的校考专业成绩,其中,来自宁波的姑娘郑佳慧,拿到了中央戏剧学院表演专业校考全国第二、女生第一名的好成绩。在社交平台上,郑佳慧转发“认领”了这个好成绩,并感慨“跟做梦一样”。很多网友在底下留言,在为她祝贺的同时,也纷纷夸赞郑佳慧长得“很有辨识度”“很有故事感”。

    2023-04-18
    00

发表回复

登录后才能评论