我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python随机数种子的使用方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python随机数种子的使用方法

本篇内容介绍了“Python随机数种子的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 随机数种子

  • numpy中的随机数种子

  • 随机数“顺序”的奥秘

在科学技术和机器学习等其他算法相关任务中,我们经常需要用到随机数,为了把握随机数的生成特性,从随机数的随机无序中获得确定和秩序。我们可以利用随机数种子(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随机数种子的使用方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python随机数种子的使用方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python随机数种子的使用方法

本篇内容介绍了“Python随机数种子的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录1. 随机数种子2. numpy中的随机数
2023-06-20

python中如何在多维数组中使用随机数种子

这篇文章将为大家详细讲解有关python中如何在多维数组中使用随机数种子,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。说明1、运行test_mult_shape函数,设定相同的随机数组,两次
2023-06-20

python中随机数种子的特性是什么

python中随机数种子的特性是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。说明1、在多次重复调用中生成的随机数不同,随机数函数无论任何分布任何类型,在确定了一次随机
2023-06-20

java生成随机数的三种方法

随机数有三种生成方式:1、通过Math.random()方法2、通过System.currentTimeMillis()方法获取毫秒数3、通过Random类第一种:常用方法Math.random()方法,是获取0-1之间的double类型的小数,在通过int类
java生成随机数的三种方法
2014-08-11

numpy产生随机数的几种方法

本文主要介绍了numpy产生随机数的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-10

使用numpy生成随机数的方法

numpy是一个在Python中非常常用的科学计算库,它提供了许多快速、高效的数值操作和数据处理函数。在numpy中,我们可以很方便地生成随机数。本文将介绍numpy中生成随机数的方法,并给出具体的代码示例。numpy中生成随机数的函数主
使用numpy生成随机数的方法
2024-01-26

Python生成随机验证码的两种方法

使用python生成随机验证码的方法有很多种,今天小编给大家分享两种方法,大家可以灵活运用这两种方法,设计出适合自己的验证码方法。 方法一: 利用range方法,对于range方法不清楚的同学,请参考文章《python开发的range()函
2022-06-04

为什么使用相同的种子会得到不同的随机数?

问题内容我正在使用具有以下 mwe 的 numpy 随机数生成器:import numpy as npnp.random.seed(40)print(np.random.randint(-3, 4))rng = np.random
为什么使用相同的种子会得到不同的随机数?
2024-02-22

Pytorch随机数生成常用的4种方法汇总

随机数广泛应用在科学研究,但是计算机无法产生真正的随机数,一般成为伪随机数,下面这篇文章主要给大家介绍了关于Pytorch随机数生成常用的4种方法,需要的朋友可以参考下
2023-05-20

shell产生随机数七种方法的实现

一、问题Shell下有时需要使用随机数,在此总结产生随机数的方法。计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数)。伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产生算法将可以产生一个非常长的不重复的序列。
2022-06-04

C++产生随机数的几种方法小结

本文主要介绍了C++产生随机数的几种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-09

Python中生成随机数据的方法

这篇文章主要讲解了“Python中生成随机数据的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中生成随机数据的方法”吧!随机性有多随机大多数用 Python 生成的随机数据在
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录