Python标准库----random

2023-11-07

一、简单认识random模块

Python官网的解释:

  • 该模块实现了各种分布的伪随机数生成器。
  • 对于整数,从范围中有统一的选择。 对于序列,存在随机元素的统一选择、用于生成列表的随机排列的函数、以及用于随机抽样而无需替换的函数。

二、本人对计算机中“随机”,“伪随机数”的理解和认识

具体的相关定义可以自行在网上查找,理解的话就看个人意识了,这里仅标明我个人的理解。思考了很多,觉得还是要在这里写一下个人的见解,这样有助于更深入的理解编程语言中“随机数”

随机是有前提的:即在我们的现实生活中,以我们现在对世界的理解。在这个前提下是存在“随机”的事件的,很多人会将这种情况规划到“玄学”,“命”,“巧合”等等概念里,我本人也是支持这个观点的,因为以现在人类的认知,很多事情是无法用逻辑解释通的,最著名的要数亚伯拉罕·林肯与约翰·肯尼迪两名总统了,感兴趣的可以去查一查。
伪随机数是可以实现的:即人类使用算法等方式,以一个基准(也被叫做种子,最常用的就是时间戳)来构造一系列数字,这些数字的特性符合人们所理解的随机数。但因为是通过算法得到的,所以一旦算法和种子都确定,那么产生的随机数序列也是确定的,所以叫伪随机数。

三、random模块的常用方法

1、random.seed()

这个函数是用来初始化随机数生成器。其输入参数可以不写,不写的时候默认是当前的时间戳,即以当前时间戳为种子生成一系列伪随机数。
random这个模块的方法都是基于算法和种子的,我们平时做简单的随机数操作时可以不显式调用这个方法,而是在使用其他方法时隐式调用调用这个。上面说到,我们计算机用到的其实都是伪随机数,这个“伪”就具体体现在这个方法:不传参数的时候,默认种子为当前时间戳,每次调用的时间戳是不同的,所以生成的随机数序列也不一样,但是当我们显式设定好同一个种子时,无论如何调用,其产生的伪随机序列都是一样的。
在这里插入图片描述

我们在这个例子中可以看到,没有显式设定种子时,每次输出的随机数都是不一样的;显式设定种子时,每次输出的随机数都是一样的。
我们还要注意到,既然叫随机数生成器,那么就符合迭代器和生成器的特点(从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退)。在同一个代码段中,只要没有重新设定随机数生成器,那么执行多次获取的随机数,在所有伪随机数序列中是连续的。如果重新设定了随机数生成器,那么取值也将从头开始 这么说可能不太清楚,我们举个例子就清楚了。
在这里插入图片描述
通过固定种子,我们可以利用随机数的代码来实现非随机数的功能。
关于代码段的描述,我在这篇文章中有提到其含义:Python学习------缓存重用机制

2、其余一些常用方法

我们已经找到了伪随机数的生成规律了,接下来的方法就仅仅是针对不同的使用场景而分化出来的了,这一部分看看官网会用就可以了,有一些我没有使用到,也不清楚有没有什么巧妙的地方,所以这里简单的罗列一下
random.random()----随机返回一个0.0 <= N < 1.0之间的浮点数。
random.uniform(a,b)----随机返回一个a<= N <= b的浮点数。
random.randint(a,b)----随机返回一个a <= N <= b的整数。
random.randrange(start,stop,step)----随机返回指定递增基数为step的集合中的一个整数,基数默认值为1,start <= N < stop。在例子random.randrange(10, 20, 3)中,实际的输出值是[10, 13, 16, 19]之一。
random.choice(seq)----从非空序列seq中随机返回一个元素。
random.getrandbits(k)----随机生成一个占内存k位以内的整数。在例子random.getrandbits(3)中,实际的输出值在000-111之间
random.choices(seq, weights=None, *, cum_weights=None, k=1)----choice()函数的升级版,3.6版本新增。可以通过权重来影响实际输出值的概率。
random.sample(seq, n)----从总体中随机不重复选择n个元素,组成新列表作为结果返回。总体里的元素可以重复,比如[1, 1, 1, 1, 1]。
random.shuffle(seq)----在原列表的基础上打乱列表的排列顺序,无返回值。
random.getstate()----捕获并返回生成器当前内部状态的对象,可以把它传递给setstate()函数来把生成器内部状态恢复到调用getstate()函数之前的状态。相当于备份。
random.setstate(state)----state应为getstate()函数的结果,用来把生成器当前的内部状态恢复为state。
random.gauss()----高斯分布
random.triangular()----三角分布
random.betavariate()----Beta分布
random.expovariate()----指数分布
random.gammavariate()----伽马分布
random.lognormvariate()----对数正态分布
random.normalvariate----正态分布
random.vonmisesvariate----von Mises分布
random.paretovariate----pareto分布
random.weibullvariate----weibull分布

四、参考文献

python官方文档:https://docs.python.org/zh-cn/3.7/library/random.html#random.Random

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python标准库----random 的相关文章

随机推荐

  • electron 获取电脑mac地址遇到的坑

    最近公司需求做一个exe程序 无奈只是一个小前端 只能使用electron来实现了 其中一个需求就是每个账号绑定唯一的电脑 这里选用网卡的mac地址来做这个唯一的字段 代码很简单 测试也很顺利 const mainWindow new Br
  • 房地产投资占GDP比例畸高 中国房地产泡沫是一颗毒瘤

    转 http house ifeng com detail 2014 05 04 46139202 0 shtml 房地产投资占GDP比例畸高 2013年房地产投资占GDP比例高达16 而事实上从1960年来但凡房地产投资占GDP比例高于6
  • 昇思MindSpore安装教程

    目录 昇思MindSpore安装教程 MindSpore 安装MindSpore 开始安装 创建虚拟环境 进入工作目录 下载完成 验证是否成功安装 关注MindSpore社区官方号 昇思MindSpore安装教程 MindSpore 它是华
  • [js] : js 设置 style 的 important

    const div document getElementById xxx div style setProperty height 100px important api 详情 参见 CSSStyleDeclaration getProp
  • 论文笔记:Blockchain in Industries: A Survey

    一 基本信息 论文题目 Blockchain in Industries A Survey 发表时间 IEEE Access 2019 作者及单位 二 摘要 区块链技术近来已成为研究和工业界的最前沿 因为它们为许多行业带来了潜在的好处 这是
  • 02_Numpy学习笔记(下):随机采样

    02 Numpy学习笔记 下 随机采样 文章目录 02 Numpy学习笔记 下 随机采样 一 离散型随机变量的分布 1 二项分布 2 泊松分布 3 超几何分布 二 连续型随机变量的分布 1 均匀分布 2 正态分布 3 指数分布 三 其他随机
  • 华为OD机试真题 Java 实现【日志采集系统】【2023Q1 100分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 一 题目描述 日志采集是运维系统的的核心组件 日志是按行生成 每行记做一条 由采集系统分批上报 如果上报太频繁
  • Python装饰器探究

    说在前边 装饰器作为Python中的一个比较实用的东西 在我们日常库的使用过程中经常使用 但是其细节问题我们却常常忘记考虑 本文章就此问题写建装饰器代码来进行一步一步分析 装饰器实验 1 我们常见的装饰器使用方式 from functool
  • ROS激光SLAM导航理解

    ROS激光SLAM导航理解 注 最近学习ROS的激光导航知识 需要理清ROS的SLAM 环境感知 costmap 与导航算法 为防止自己忘记 将觉得有价值的内容收集于此 对AGV来说 SLAM是个大大坑 环境感知和局部运动控制也是大坑 学习
  • 数据库添加/删除/修改 表字段(超详细)

    Oracle 添加 删除 修改 表字段 超详细 1 添加表字段 1 1 语法结构 1 2 举例说明 1 新建学生信息表 该步骤可忽略 2 初始表样子 3 语法解释 2 修改表字段 2 1 语法结构 1 修改字段属性 2 修改字段名 2 2
  • games101课程作业,在Vs2019环境下的配置环境(不使用虚拟机)

    为什么不使用虚拟机 因为虚拟机使用ubuntu x64版本系统 是一个从未接触过的系统 不好使用 虚拟机中无法使用中文输入法 无法对代码进行注释 不利于学习 虚拟机性能差 打开两三个文件就卡 令人抓狂 要使用终端进行编译 很是麻烦 还是喜欢
  • 面试经典-不被忽略的@property

    我们都知道 property是用来声明属性的 可以保存类的状态或信息 而与其相关的内容 诸如copy weak 深拷贝等 经常会在面试的过程中出现 接下来深入下这些模糊 熟悉的内容 理理顺 内容概要 1 property的本质 2 自动合成
  • Profinet 的交互流程

    Profinet 的交互流程 启动过程 在启动Profinet IO设备时 在设置IP地址之前 使用DCP协议 该协议类似于DHCP协议 PLC发送DCP广播消息 Identify 子网上的所有IO设备都使用本身的MAC地址进行应答 PLC
  • 机器学习算法与Python实践之(六)二分k均值聚类

    机器学习算法与Python实践之 六 二分k均值聚类 zouxy09 qq com http blog csdn net zouxy09 机器学习算法与Python实践这个系列主要是参考 机器学习实战 这本书 因为自己想学习Python 然
  • 基于IDEA的Java学生管理系统

    1 创建学生类 package studentManager public class Student 定义成员变量 private String num 学号 private String name 姓名 private String a
  • 善用Linux内核中的各种数据结构和算法

    1 介绍 在数据结构和算法一文中经常就信手拈来一些基本数据结构和算法 如链表 队列 栈 二叉树等等 但是在C的标准库中并没有自带这些 C 通过STL 类程序库等等会带这些 那么在嵌入式开发里面怎么快速方便使用这些数据结构和算法咧 答案就是从
  • OpenGL 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

    OpenGL 理解GL TRIANGLE STRIP等绘制三角形序列的三种方式 2012 04 12 20 19 19389人阅读 评论 7 收藏 举报 GL TRIANGLE STRIP绘制三角形方式很多时候令人疑惑 在这里对其运作机理进
  • 【Java基础·Comparator多字段排序】

    Java基础 Comparator多字段排序 需求 对指定List按照 身份证号 姓名 入学时间倒序排列 版本1 package com biaogexf tools import lombok Data import java util
  • 游戏开发unity杂项知识系列:GameObject组件的SetActive、active、activeSelf与activeInHierarchy

    SetActive 控制物体的显示状态 SetActive true 物体设置为可显示状态 但是仍然依赖上层的显示状态 上层显示状态为可显示才能显示 SetActive false 物体设置为不可显示状态 active 在某个版本后已经弃用
  • Python标准库----random

    目录 一 简单认识random模块 二 本人对计算机中 随机 伪随机数 的理解和认识 三 random模块的常用方法 1 random seed 2 其余一些常用方法 四 参考文献 一 简单认识random模块 Python官网的解释 该模