np.random.seed()随机数种子学习笔记

article/2025/8/30 4:39:54

文章目录

  • np.random.seed()随机数种子
    • 为什么使用np.random.seed()
    • 什么是np.random.seed()
  • 代码理解
  • np.random.seed()的参数
  • 适用情况

np.random.seed()随机数种子

为什么使用np.random.seed()

在机器学习中,有很多的操作和算法带有一定的随机性,所以在复现时,如果涉及到这些操作或算法,结果就可能产生差异,比如:神经网络中的权重初始化、K-means算法的初始聚类中心的选取、随机森林算法中涉及到的数据或特征抽样、随机抽取样本组成的训练集和测试集。
需要复现带有一定随机性的一些操作和算法时,就需要用到随机种子来固定随机的结果。

什么是np.random.seed()

计算机中没有完全的随机数,随机数函数都是通过概率分布来产生随机数,不同的seed函数参数修改概率分布函数中的参数,所以会出来不同的随机值。
随机种子生成器,使下一次生成的随机数为由种子数决定的特定的随机数,如果seed中参数为空,则生成的随机数完全随机。

代码理解

①当不使用random.seed()时,每次生成的随机数不同
在这里插入图片描述
②使用random.seed()时,每次生成的随机数相同
在这里插入图片描述
③但是需要注意的是:但是random.seed()设定的随机种子仅有一次有效,也就是说,第一次调用random时使用的是我们随机数种子给定的初值列表,第二次调用时设置的seed对生成随机数无效。
seed方法的影响效力仅限于下面的第一个random语句。
在这里插入图片描述

④但是只要设置了seed,设定该种子产生的列表时,后面的所有随机函数,就会被记录下来,也就是说,可以调用多次np.random.rand来创建该随机数种子的列表。

np.random.seed(0)  # 先定义一个随机数种子
print(np.random.rand(5))  # 随机生成5个数
print(np.random.rand(5))  # 再随机生成5个数
# 结果
[0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]
[0.64589411 0.43758721 0.891773   0.96366276 0.38344152]np.random.seed(0) #调用上述随机数种子(对应生成的列表,从第一个数开始)
for i in range(7):print(np.random.random())  # 随机生成7个数
# 结果
0.5488135039273248
0.7151893663724195
0.6027633760716439
0.5448831829968969
0.4236547993389047
0.6458941130666561
0.4375872112626925

⑤由以下代码可知,我们定义了一个随机数种子,可以调用7次np.random向该种子产生的列表中添加值;而在使用该随机数种子时,我们只能调用一次np.random来选取该列表的值,再次调用时则失效。

np.random.seed(0)
for i in range(7):print(np.random.random())
# 结果
0.5488135039273248
0.7151893663724195
0.6027633760716439
0.5448831829968969
0.4236547993389047
0.6458941130666561
0.4375872112626925np.random.seed(0)
print(np.random.rand(2, 3))
print(np.random.rand(1))
# 结果
[[0.5488135  0.71518937 0.60276338][0.54488318 0.4236548  0.64589411]]0.45216841

故对于该函数的使用,可总结为:
①随机数种子相当于给我们一个初值,之后按照固定顺序生成随机数(该随机数种子对应的list);如果使用相同的seed( )值,则每次生成的随机数列表都相同;
②如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
③设置seed()的时,可以调用多次random()向该随机数的列表中添加信息;而再次使用设置的seed()值时,仅一次有效,也就是说调用第二次random()时则脱离该随机数的列表。
④seed方法设立的目的是为了能够实现实验的可重复进行,得到相同的随机值结果。

np.random.seed()的参数

给定的随机数种子可以理解为生成了很大的列表list,然后我们按顺序向其中添加给定值,下次再次调用时,即从初值(list[0])开始顺序调用。
在这里插入图片描述
那这个初值是怎么决定的呢,是np.random.seed()中的参数决定,只要每次这个参数相同,那我们的初值就是相同的,种子就是相同的;种子相同,之后长得枝条就是相同的: 即 list 是相同的。
这个参数是人为给定的,可以认为是初值的标志,每次按照这个标志都可以得到相同的初值,但是这个参数必须int类型。

适用情况

我知道当你使用numpy.random.seed(0)时,每次在你自己的电脑上得到的结果都是一样的。我想知道这是否也适用于不同的计算机和不同的numpy安装
这完全取决于numpy random function内部实现的algorithm类型。在numpy的情况下,由pseudo-random number generators(PRNGs)算法操作。这意味着,如果您提供相同的种子(在开始输入时),您将获得相同的输出。如果你改变种子,你会得到不同的结果。所以这种算法不依赖于系统。
但是对于一个true random number generator (TRNG)来说,它们通常依赖于某种特殊的硬件,对环境中一些不可预知的东西进行物理测量,比如光或温度、电噪声、放射性物质。因此,如果一个模块实现了这种算法,那么它将依赖于系统。
也就是说,面对一个随机操作,只要运行环境一致并保证伪随机数生成程序相同,此时设定随机种子一致就可以复现结果。


http://chatgpt.dhexx.cn/article/JRviqsxi.shtml

相关文章

种子项目详解

引言 在上一篇文章简单讲解了种子项目搭建,但是项目搭建起来是为了方便我们后续开发的。因此了解整个项目的架构,以及各个Maven模块是如何各司其职、相互依赖,是至关重要的。 这里分成两块介绍 lenosp自带的内容新增扩展的内容 lenosp自带…

【Abp VNext】实战入门(九):DbMigrator 自定义项目所需种子数据

前言: 项目开发过程中难免会涉及到一些业务相关的基础数据,我们称之为种子数据,主要为了方便测试功能或者展示效果; 常规做法是手动到数据库表创建数据,但是随着表结构更改或者数据清空后,又要重新录入基…

区块链模块化的大胆尝试,解读公链Celestia

作为以链游为主的社区,暴躁兔也会时常关注加密行业的其他赛道和方向。对于目前市场而言,公链的机会与红利仍然存在,且相对而言,技术创新较多,同时资本也比较喜欢这样的赛道。今天为大家讲解的是Cosmos生态的项目Celest…

scrapy_redis种子优化

前言: 继《scrapy_redis去重优化(已有7亿条数据),附Demo福利》优化完去重之后,Redis的内存消耗降了许多,然而还不满足。这次对scrapy_redis的种子队列作了一些优化(严格来说并不能用上“优化”…

总结一下Python的模块加载解析

正式的Python专栏第16篇,同学站住,别错过这个从0开始的文章! 学委之前分享了很多代码,也发布了几个库。 新手可以从两篇基础文章入手学习,积累了一些代码,可以考虑做成一个个模块,包装代码有利…

C++ 函数(模块化编程)

目录 函数定义 函数 函数定义的语法形式 函数调用 调用函数需要先声明函数原型 函数调用形式 嵌套调用 例3-1编写一个求x的n次方的函数 例3-2 数制转换 源代码: 例3-3 编写程序求π的值 arctan函数 主程序 例3-4 寻找并输出11~999之间的数M&#xf…

单片机常开常闭检测

单片机检测常开常闭点(干接点信号)的方法:检测干接点的闭合和断开,从而单片机实施一定的操作,它具有两根线,具体步骤:1、引出单片机一个IO口线,连接干接点一端。2、干接点另一端通过…

干海星怎么吃做法 干海星的功效与作用有哪些

干海星是生活中并不常见的一种海鲜类食材,在很多人眼中干海星都是一种中药材,其实它也可以当做一种菜品来食用,那么干海星应该怎么吃呢?接下来我就把自己总结的干海星吃法大全写出来分享给大家。 干海星怎么吃 干海星的功效与作用…

大前端干货资料

JavaScript 文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference ES6 入门教程:https://es6.ruanyifeng.com/ Vue 官网:https://cn.vuejs.org router 官网:https://router.vuejs.org/zh UI框架 Ele…

干簧管(磁开关)

其实干簧管的工作原理并不复杂 干簧管的特点: 干簧管是干式舌簧管的简称,是一种有触点的无源电子开关元件,具有结构简单,体积小便于控制等优点,其外壳一般是一根密封的玻璃管,管中装有两个铁质的弹性簧片…

苹果手机位置共享后没开启定位服务器,iPhone默认开启但无卵用的设置开着干嘛?难怪手机这么耗电...

原标题:iPhone默认开启但无卵用的设置开着干嘛?难怪手机这么耗电 如果你的苹果手机开启了定位功能,那么在iPhone【设置】-【隐私】-【定位服务】-系统服务】,点击进入后有很多项开关,而很多都是在打开定位服务后默认开…

adams打不开提示msc license_adams安装后打不开

虽然要支持正版……但是 安装后打不开,借鉴了adams2017安装教程后台留言 图片发自简书App 1.首先我这么做是因为其实在安装过程中就有一次没找到路径 。所以该方法仅供参考。 图片发自简书App 此时我直接在“此电脑”内搜索“MSC.Software”了 图片发自简书App 耐心…

使用Arduino开发板连接干簧管(Reed Switch)的方法

topic 1.干簧管(Reed Switch)干簧管的特点:模块使用说明:干簧管有两种常见的类型:干簧管常见的应用需要的组件代码 1.干簧管(Reed Switch) 干簧管,又称磁力开关或磁簧开关&#xff0…

查看电脑使用日志------电脑干了些什么,别人是否动了你的电脑

** 现在我们都有了电脑,有时候短暂的离开可能会有人偷偷的查看你的电脑,有意无意的,总是会感觉心里不是很踏实,那么怎么知道自己的电脑有没有被别人偷偷的查看呢,下面我们通过一些列操作查看电脑是否被别人动过&#x…

高版本envi打不开Landsat8 C2L2数据解决教程

引申部分不写,直接开干 首先找到你的Landsat8 C2L2数据 进入后将首行GROUP LANDSAT_METADATA_FILE改为GROUP L1_METADATA_FILE 编辑—查找—GROUP LEVEL1_PROCESSING_RECORD,查找下一处可得该区域总和 将 GROUP LEVEL1_PROCESSING_RECORD 到 END_…

【错误记录】Melodyne 报错 ( 无法打开音频文件 )

文章目录 一、报错信息二、修改音源格式三、继续使用 Melodyne 打开 一、报错信息 打开一个 48000Hz , 立体声音源 , 采样位数 32 位的采样 , 无法打开 , 报下面的错误 ; 这是用 Bandicam 录制的音频 , 感觉有点问题 , 之后使用 Au 录制音频 ; 二、修改音源格式 在 Adobe Audit…

带你了解测开

测开——测试开发工程师 测试开发工程师 (Software Development Engineer in Test,简称SDET)是指那些既可以称作是开发人员,同时也负责软件开发阶段和测试周期的测试工作的技术人员。一个专业的SDET更关注软件产品的可测性,稳健性和性能。他…

开干,开源 k8s 负载均衡器大比拼

原文链接:https://ewhisper.cn/posts/29610/ 🧠 译者声明: 请注意文章发布时间,时间比较久远,部分观点可能已经过时。原文作者为 PureLB 的利益相关者,所以本文可能不尽客观。 词汇表 英文中文备注LoadBala…

开干!Elasticsearch官方文档离线访问实操指南

Elasticsearch 最少必要知识实战教程直播回放 1、开发不能联网怎么访问Elasticsearch文档? 这是最近被频繁问到的问题。直接上个图: 不能让 Elasticsearch 文档限制了你我的学习热情! 2、直接开干 步骤1:访问:https://…

开干!

阅读本文大概需要 2.6 分钟。 很多人知道,我自由了,但很多人会误以为自由就是在家混吃等死,那人生得多没意思,我也有自己的事要做的,只是会自主安排时间,自主决策事情而已,下周开始,…