random — 伪随机数生成器(史上总结最全)
目的:实现几种类型的伪随机数生成器。
random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器。Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输入,可生成具有分布均匀,大周期的数字,使其可以广泛用于各种应用。
生成随机数
random() 函数从生成的序列中返回下一个随机浮点数。所有返回值都在 0<= n < 1.0 范围内。
random_random.pyimport randomfor i in range(5):print('%04.3f' % random.random(), end=' ')
print()
反复运行程序生成不同序列的数字。
$ python3 random_random.py0.859 0.297 0.554 0.985 0.452$ python3 random_random.py0.797 0.658 0.170 0.297 0.593
为了生成指定范围内的数字,使用 uniform() 方法。
random_uniform.pyimport randomfor i in range(5):print('{:04.3f}'.format(random.uniform(1, 100)), end=' ')
print()
传入最小和最大值, uniform() 使用公式 min + (max - min) *random() 调整 random() 的返回值。
$ python3 random_uniform.py12.428 93.766 95.359 39.649 88.983
Seeding
random() 每次调用的时候都生成不同的值,并且在它重复任何数字之前有一个很大的周期。这对于生成唯一值及其变体很有用,但有时以不同的方式处理相同的数据集是很有用的。一种技术是用一个程序生成随机数并保存他们以通过单独的步骤进行处理。然而,对于大量数据可能不实用,所以,random 模块包含了 seed() 函数用于初始化伪随机数生成器以生成预期的一组值。
random_seed.pyimport randomrandom.seed(1)for i in range(5):print('{:04.3f}'.format(random.random()), end=' ')
print()
种子值用于控制根据公式生成的伪随机数序列的第一个值,并且由于公式是确定的,所以种子改变后它实际上设置了生成的完整序列。传入 seed() 的参数可以是任何可哈希的对象。默认使用基于平台的随机源(如果可用),否则,使用当前时间。
$ python3 random_seed.py0.134 0.847 0.764 0.255 0.495$ python3 random_seed.py0.134 0.847 0.764 0.255 0.495
保存状态
random() 使用的伪随机数生成算法的内部状态可以被保存下来,然后用于控制子序列运行时生成的数字。在继续之前,从较早的输入恢复状态减少了生成重复值和序列的可能性。getstate() 函数可以返回随后用于 setstate() 的重新初始化随机数生成器的数据。
random_state.pyimport random
import os
import pickleif os.path.exists('state.dat'):# Restore the previously saved stateprint('Found state.dat, initializing random module')with open('state.dat', 'rb') as f:state = pickle.load(f)random.setstate(state)
else:# 使用一个初始状态print('No state.dat, seeding')random.seed(1)
生成随机数
for i in range(3):print('{:04.3f}'.format(random.random()), end=' ')
print()
为下次使用保存状态
with open('state.dat', 'wb') as f:pickle.dump(random.getstate(), f)
生成更多的随机数
print('\nAfter saving state:')
for i in range(3):print('{:04.3f}'.format(random.random()), end=' ')
print()
getstate() 返回的数据是一个实现细节,所以这个例子使用 pickle 保存数据到文件,仅仅将它视作一个黑盒子。当程序开始的时候,如果该文件存在,它加载旧的状态然后继续。每次在保存状态前后运行生成了一些数字,去演示恢复状态导致生成器产生了再次产生了相同的值。
$ python3 random_state.pyNo state.dat, seeding
0.134 0.847 0.764After saving state:
0.255 0.495 0.449$ python3 random_state.pyFound state.dat, initializing random module
0.255 0.495 0.449After saving state:
0.652 0.789 0.094
随机整数
random() 生成浮点数。可以将结果转换为整数, 但使用 randint() 直接生成整数更方便。
random_randint.pyimport randomprint('[1, 100]:', end=' ')for i in range(3):print(random.randint(1, 100), end=' ')print('\n[-5, 5]:', end=' ')
for i in range(3):print(random.randint(-5, 5), end=' ')
print()
randint() 的取值范围是其参数的闭区间。数字可以是正数或负数,但第一个值应小于第二个值。$ python3 random_randint.py[1, 100]: 98 75 34
[-5, 5]: 4 0 5
randrange() 是从范围中选择值的更一般形式。random_randrange.pyimport randomfor i in range(3):print(random.randrange(0, 101, 5), end=' ')
print()
randrange() 支持 step 参数,除了开始和结束值, 所以它完全等同于从 range(start, stop, step) 中选择一个随机值。它效率更高,因为范围实际上并没有构建。
$ python3 random_randrange.py15 20 85
随机选择序列值
随机数生成器的一个常见用途是从枚举序列中返回随机项,既是这些值不是数字。 random 模块包含了 choice() 函数用于从序列中随机获取值。这个例子模拟了投 10000 次硬币正面和反面出现的次数。
random_choice.pyimport random
import itertoolsoutcomes = {'heads': 0,'tails': 0,
}
sides = list(outcomes.keys())for i in range(10000):outcomes[random.choice(sides)] += 1print('Heads:', outcomes['heads'])
print('Tails:', outcomes['tails'])
这里仅有两个可允许的结果,因此不是使用数字并转换他们,而是直接将 "heads" 和 "tails" 与 choice() 一起时候用。$ python3 random_choice.pyHeads: 5091
Tails: 4909
排列
对棋牌游戏的模拟需要混合一副牌,然后把它们发给玩家,并且不能多次使用同一张牌。使用 choice() 会导致相同的牌被多次使用,因此可以使用 shuffle() 洗牌,然后在发牌的时候移除他们。
random_shuffle.pyimport random
import itertoolsFACE_CARDS = ('J', 'Q', 'K', 'A')
SUITS = ('H', 'D', 'C', 'S')def new_deck():return [# 值总是用两个值,所以字符串有一致的长度'{:>2}{}'.format(*c)for c in itertools.product(itertools.chain(range(2, 11), FACE_CARDS),SUITS,)]def show_deck(deck):p_deck = deck[:]while p_deck:row = p_deck[:13]p_deck = p_deck[13:]for j in row:print(j, end=' ')print()
创建一副有序新牌
deck = new_deck()
print('Initial deck:')
show_deck(deck)
随机打乱牌的次序
random.shuffle(deck)
print('\nShuffled deck:')
show_deck(deck)
Deal 4 hands of 5 cards each
hands = [[], [], [], []]for i in range(5):for h in hands:h.append(deck.pop())
展示手里的牌
print('\nHands:')
for n, h in enumerate(hands):print('{}:'.format(n + 1), end=' ')for c in h:print(c, end=' ')print()
展示剩下的牌
print('\nRemaining deck:')
show_deck(deck)
卡片表示为带有面值和数字。通过每次向四个列表中添加一张卡片,并且将其从牌桌上移除以使其无法再次使用而创建默认的 「hands」。$ python3 random_shuffle.pyInitial deck:2H 2D 2C 2S 3H 3D 3C 3S 4H 4D 4C 4S 5H5D 5C 5S 6H 6D 6C 6S 7H 7D 7C 7S 8H 8D8C 8S 9H 9D 9C 9S 10H 10D 10C 10S JH JD JCJS QH QD QC QS KH KD KC KS AH AD AC ASShuffled deck:QD 8C JD 2S AC 2C 6S 6D 6C 7H JC QS QCKS 4D 10C KH 5S 9C 10S 5C 7C AS 6H 3C 9H4S 7S 10H 2D 8S AH 9S 8H QH 5D 5H KD 8D
10D 4C 3S 3H 7D AD 4H 9D 3D 2H KC JH JSHands:
1: JS 3D 7D 10D 5D
2: JH 9D 3H 8D QH
3: KC 4H 3S KD 8H
4: 2H AD 4C 5H 9SRemaining deck:QD 8C JD 2S AC 2C 6S 6D 6C 7H JC QS QCKS 4D 10C KH 5S 9C 10S 5C 7C AS 6H 3C 9H4S 7S 10H 2D 8S AH
采样
许多模拟器需要来自一组输入值的模拟样本。sample() 函数用于生成不重复样本值,并且不改变输入序列。这个例子展示了从系统字典中打印随机样本单词。random_sample.pyimport randomwith open('/usr/share/dict/words', 'rt') as f:words = f.readlines()
words = [w.rstrip() for w in words]for w in random.sample(words, 5):print(w)
用于产生结果集的算法考虑了输入的大小和所请求的样本以尽可能有效地产生结果。$ python3 random_sample.pystreamlet
impestation
violaquercitrin
mycetoid
plethoretical$ python3 random_sample.pynonseditious
empyemic
ultrasonic
Kyurinish
amphide
多个同时生成器
除了模块级别的函数之外,random 包含了一个 Random 类管理集合随机数生成器的内部状态。前面描述的所有函数都可以作为 Random 实例的可用方法,并且每个实例可以被单独初始化使用,而不会影响其他实例的返回值。
random_random_class.pyimport random
import timeprint('Default initializiation:\n')r1 = random.Random()
r2 = random.Random()for i in range(3):print('{:04.3f} {:04.3f}'.format(r1.random(), r2.random()))print('\nSame seed:\n')seed = time.time()
r1 = random.Random(seed)
r2 = random.Random(seed)for i in range(3):print('{:04.3f} {:04.3f}'.format(r1.random(), r2.random()))
在一个具有良好原生随机值种子的系统上,实例以一个唯一状态运行。然而,如果没有好的平台随机数生成器,实例很可能被使用当前时间播种,然后就产生了相同的值。
$ python3 random_random_class.pyDefault initializiation:0.862 0.390
0.833 0.624
0.252 0.080Same seed:0.466 0.466
0.682 0.682
0.407 0.407
系统随机数
一些操作系统提供了一个随机数字生成器,它可以访问随机数生成器引入的更多熵源。random 通过 SystemRandom 暴露了这个功能,它和 Random 有相同的 API,但是使用 os.urandom() 生成构成其它算法基础的值。
random_system_random.pyimport random
import timeprint('Default initializiation:\n')r1 = random.SystemRandom()
r2 = random.SystemRandom()for i in range(3):print('{:04.3f} {:04.3f}'.format(r1.random(), r2.random()))print('\nSame seed:\n')seed = time.time()
r1 = random.SystemRandom(seed)
r2 = random.SystemRandom(seed)for i in range(3):print('{:04.3f} {:04.3f}'.format(r1.random(), r2.random()))
SystemRandom 生成的序列是不可预测的,因为随机性来源于系统,而不是软件(实际上,seed() 和 setstate() 对它都没有影响)。
$ python3 random_system_random.pyDefault initializiation:0.110 0.481
0.624 0.350
0.378 0.056Same seed:0.634 0.731
0.893 0.843
0.065 0.177
非均匀分布
虽然 random() 生成的均匀分布值可以用于大多数目的,但是其他分布可以更能精确地模拟特定情况。 random 模块也提供了生成这些分布的函数。他们被列在这里了,但是并没有详细覆盖,因为它们的使用趋向于特别的并且需要更复杂的案例。
正态分布
正态分布 通常用于非均匀分布的连续纸,例如,成绩,高度,宽度等。该分部生成的曲线具有独特的形状,导致他被叫做 「钟形曲线」。random 模块包含了两个生成正态分布值的函数,normalvariate() 和 略快的 gauss() (正太分布也被叫做高斯分布)。
相关函数 lognormvariate() 生成的伪随机值的对数符合正太分布。对数正态分布对于作为几个不相互作用的随机变量的乘积的值很有用。
近似分布
三角分布用于小样本量的近似分布。三角形分布的曲线在已知的最小和最大值处具有低点,并且在模式处具有高点,其基于最可能的结果( 由 triangular() 的模式参数反映)。
指数分布
expovariate() 生成一个指数分布,用于模拟均匀 Poisson 过程中的到达和间隔时间值,例如放射性衰减或者进入服务器的请求数。
Pareto 或者 幂等分布符合许多由 Long Tail 观察到的现象。paretovariate() 可以模拟个人资源分配(人们的财富,对音乐家的需求,对博客的关注等)。
Angular
Von Mises 或者 圆形正态分布(由 vonmisesvariate() 生成)用于计算循环值的概率,日历 T 天数和时间。
大小
betavariate() 使用 Beta 分布生成值,这通常用于贝叶斯统计和应用程序(如任务持续时间建模)。
gammavariate() 产生的 Gamma 分布用于模拟诸如等待时间,降雨量和计算误差之类事物的大小。
由 weibullvariate() 计算的 Weibull 分布用于故障分析,工业工程和天气预报。它描述了粒子或者其他离散对象的分布。
相关文章:
random — 伪随机数生成器(史上总结最全)
目的:实现几种类型的伪随机数生成器。 random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器。Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输入,可生成具有分布均匀,大周期的数字,使其可以广泛用于各种…...
基于VBA实现成绩排序的最佳方法-解放老师的双手
作为一名老师,每到期末就要面对一件让人头疼的事情——成绩表统计。 首先,要收集每个学生的考试成绩。这需要花费大量的时间和精力,因为每个学生都有多门科目的成绩需要统计。 其次,要将每个学生的成绩录入到电子表格中。这看起来…...
OCAF如何实现引用关系和拓扑关系
在 OpenCASCADE 中,TDF_Label 是用来保存对象及其属性的基本单元。TDF_Label 可以通过添加不同类型的属性来保存不同的数据类型。属性是继承自 TDF_Attribute 类的对象,每个属性都有一个唯一的标识符(GUID)来识别其类型。TDF_Label是OpenCASCADE中用来管理数据的标签类,它…...
自动创建设备节点
在成功加载驱动模块之后,还需要使用 mknod命令创建设备节点,才能在/dev目录下创建对应的设备文件。自动创建设备节点的功能需要依赖 mdev 设备管理机制,在使用 buildroot 构建 rootfs 的时候,会默认构建 mdev 的功能,m…...
JavaWeb ( 六 ) JSP
2.4.JSP JSP (Java Server Pages) : 一种在服务器端生成动态页面的技术,本质上就是Servlet。将HTML代码嵌入到Java代码中, 通过Java逻辑控制HTML代码的结构从而生成页面。在MVC中通常担任视图层(view),负责信息的展示与收集。 2…...
2023世界超高清视频产业发展大会博冠8K明星展品介绍
2023世界超高清视频产业发展大会博冠8K明星展品介绍: 一、博冠8K全画幅摄像机B1 这是一款面向广电应用的机型,可适配外场ENG制作轻量化需求,应用于8K单边机位、新闻、专题的拍摄工作,也可应用于体育转播、文艺节目等特殊机位及各…...
Map接口以及Collections工具类
文章目录 1.Map接口概述1.1 Map的实现类的结构1.2 Map中存储的key-value结构的理解1.3 HashMap的底层实现原理(以JDK7为例)1.4 Map接口的常用方法1.5 TreeMap1.6 Map实现类之五: Properties 1.Collections工具类1.1方法1.1.1 排序操作(均为static方法)1.1.2 查找、替换 1.Map接…...
SOA协议DDS和Some/IP对比
SOME/IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中。 SOME/IP 和 DDS是在不同的应用场景和不同的需求下诞生的技术,所以它们之间注定有很大的区别。 SOME/IP SOME/IP的全称为:Scalable service-Oriented MiddlewarE over IP,是一种面向服务…...
Sass使用
前言: 这份记录,主要是记录学习sass的学习记录,用于记录一些本人认为可能以后会用到的比较常用的一些知识点,更详细的请看sass官网 功能1-嵌套规则 Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的…...
超大excel文件读,避免内存溢出
excel40M,但是用传统的读取excel方法,会报内存溢出的错误。 所以采用了下面的方式,能解决此问题: maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><ve…...
第0章 学习之前的准备
突然想写点关于linux的东西,一是将自己几十年来零碎的知识作以串联,二是能为正在学习路上的新手作些指引。而恰好作者的孩子是一位初一的学生,我写的这些东西也正是我手把手教授他的,现在分享出来并且命名为《linux中学教程》&…...
数组排序sort()方法
sort() 方法对数组的项目进行排序。 排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。 默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。 一、语法 array.sort(compareFunct…...
【.NET AI Books 前言】Azure OpenAI Service 入门
本书是为 .NET 开发者而写的,让 .NET 开发者能快速掌握 Azure OpenAI Service 的使用技巧。 ChatGPT 的到来意味着我们已经置身于 AI 引起的全新变革中,作为开发者你可能将面临几种改变: GPT 模型到来后,如何去架构好企业解决方案…...
散列查找实验(开散列) 题目编号:583
题目描述 请设计一个整型开散列表,散列函数为除留余数法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,输出查找结果采用头插法。 输入描…...
Java版spring cloud 企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...
Go type关键字定义新类型和类型别名的区别
type关键字再定义类型和类型别名有很大的区别,前者是新定义一个数据类型,后者是对类型的重命名。 type NewString stringtype OldString stringtype NewString string声明了一个NewString类型,和string具有完全一致的数据结构,确…...
Neural Network学习笔记2
torch.nn: Containers: 神经网络骨架 Convolution Layers 卷积层 Pooling Layers 池化层 Normalization Layers 正则化层 Non-linear Activations (weighted sum, nonlinearity) 非线性激活 Convolution Layers Conv2d torch.nn.Conv2d(in_channels, out_channels, ke…...
用@Value注解为bean的属性赋值
1.Value注解 Value注解的源码,如下所示 Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface Value {String value(); }从Value注解的源码中…...
拨云见日:深入理解 HTML 解析器与有限状态机
文章目录 参考描述状态机状态机有限状态机与无限状态机有限状态机与自动售货机无限状态机与计算器 HTML 解析器HTML 解析器HTML 与有限状态机 HTML 解析器的常见状态初始状态DOCTYPE 状态注释状态标签状态开始标签状态属性状态属性名状态属性值状态 结束标签状态自闭和标签状态…...
Java线程池及其实现原理
线程池概述 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机…...
进程替换函数组介绍exec*
目录 前述 execl execlp execle execv execvp execvpe 前述 介绍后缀的意义: l (list):表示参数采用列表。 v(vector):参数同数组表示。 p(path):自…...
欧科云链OKLink:2023年4月安全事件盘点
一、基本信息 2023年4月安全事件共造约6000万美金的损失,与上个月相比,损失金额有所降落,但安全事件数量依旧不减。其中,Yearn Finance因参数配置错误,导致了1000多万美金的损失。同时,有一些已经出现过的…...
KubeVirt备份与还原方案【翻译】
KubeVirt备份与还原方案【翻译】 ref:https://github.com/kubevirt/kubevirt/blob/main/docs/backup-restore-integration.md 备份 为所有必需的k8s资源构建依赖关系图冻结应用程序pvc数据快照解冻应用程序将所有必需的k8s资源定义拷贝到一个共享的存储位置(可选…...
使用PyQt5设计一款简单的计算器
目录 一、环境配置: 二、代码实现 三、主程序 四、总结 本文使用PyQt5设计一款简单的计算器,可以通过界面交互实现加减乘除的功能,希望能够给初学者一些帮助。主要涉及的知识点有类的定义与初始化、类的成员函数、pyqt5的信号与槽函数等。…...
Htop使用说明
目录 引言 什么是htop htop安装 htop界面介绍 htop功能介绍 引言 我们使用服务器的时候常常需要关注下自己的程序资源占用情况,htop就是一种互动式的进程查查看器,整齐用下来感觉比top的逼格高,造作可视化都更方便些,我觉得还…...
PostgreSQL Linux安装
安装依赖: sudo yum -y install readline-devel zlib-devel 安装Postgres: ssh hadoophadoop001 #下载Postgres wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz tar -zxvf postgresql-14.2.tar.gz -C /data #编译前准备 /dat…...
亚商投资顾问 早餐FM/0509车辆电动化
01/亚商投资顾问 早间导读 1.上交所拟于5月11日举办“发现央企投资价值,促进央企估值回归”交流会 2.监管部门十方面举措加强房地产经纪行业管理 3.广东:推动城市公共服务及货运配送车辆电动化替代 4.昆山两楼盘因大幅降价被暂停网签:降幅…...
AI绘画天花板——Midjourney注册使用保姆级教程(5月5日验证有效)
大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,备注:aigc,拉你进群。 现在市面上AI绘图大概有三大阵营:Midjourney、Stable Diffusion,还有一个就是OpenAI实…...
学习笔记(2)项目结构描述 - manifest.json和pages.json
目录 1,manifest.json2,pages.json2.1,pages2.2,globalStyle2.3,tabBar 1,manifest.json 官方详情 uni-app 的 appid 由 DCloud 云端分配,主要用于 DCloud 相关的云服务,请勿自行修…...
vector、deque、list相关知识点
vector erase返回迭代器指向删除元素后的元素insert返回迭代器指插入的元素reserve只给容器底层开指定大小内存空间,并不添加新元素 deque 底层数据结构 动态开辟的二维数组,一维数组从2开始,以2倍方式扩容,每次扩容和&#x…...
贵阳58同城做网站/如何创建一个属于自己的网站
software is a system built up of many parts rebuild that decompositionsee the patterns in codes is a skill that one develops with practice转载于:https://www.cnblogs.com/nn0p/p/4378547.html...
廊坊网站制作公司/seo是搜索引擎营销吗
Bland-Altman一致性分析临床上,如何评判两种检测方法学的一致性呢?对于定性资料,一般是通过kappa一致性分析:比如,如何评价C13呼气试验和病理活检对幽门螺旋杆菌(Hp)检测的一致性呢?这个在之前的推文中有详…...
wordpress 筛选 文章/知名的网络推广
整个项目包含了:开题报告 开题报告PPT 任务书 中期报告 论文模板 答辩PPT等 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术,主要包括了前端小程序开发的MINA框架;后台开发java的框架springboot、模板引擎 thymeleaf…...
wordpress怎么添加论坛/网站服务器多少钱一年
声明式函数定义; function add(m,n) {alert(mn);} 这种方式等同于构造一个Function类的实例的方式: var add new Function("m", "n", "alert(mn);"); 转载于:https://www.cnblogs.com/guangshan/p/4593188.html...
怎么把自己做的网页上传网站/百度快照优化排名
所遇问题:之前测试的项目中对“长图片”进行分享时,发现部分安卓手机无法调起微信……紧接着就被通知测试人员多测几部机型,找下规律……what……那么多手机难道我们要一部部都过?如果真的把所有手机过一部部测,不紧耗…...
网站推广方法素材/接单平台app
自动化目标\n 自动化实现方案\n\n...