"); //-->
对于Python随机数如何生成模块random的方式,相信小伙伴们或多或少知道一些,每个Python开发工程师都耳熟能详,但是具体的是什么?今天就让我们扣丁学堂为你详细讲解。
一、概述
random模块用于生成伪随机数之所以称之为伪随机数,是因为真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。
Python的这个库在底层使用通用的算法,经过长久的考验,可靠性没得说,但绝对不能用于密码相关的功能。
二、基本方法
random.seed(a=None,version=2)
初始化伪随机数生成器。如果未提供a或者a=None,则使用系统时间为种子。如果a是一个整数,则作为种子。
random.getstate()
返回一个当前生成器的内部状态的对象
random.setstate(state)
传入一个先前利用getstate方法获得的状态对象,使得生成器恢复到这个状态。
random.getrandbits(k)
返回一个不大于K位的Python整数(十进制),比如k=10,则结果在0~2^10之间的整数。
三、针对整数的方法
random.randrange(stop)
random.randrange(start,stop[,step])等同于choice(range(start,stop,step)),但并不实际创建range对象。
random.randint(a,b)
返回一个a<=N<=b的随机整数N。等同于randrange(a,b+1)
四、针对序列类结构的方法
random.choice(seq)
从非空序列seq中随机选取一个元素。如果seq为空则弹出IndexError异常。
random.choices(population,weights=None,*,cum_weights=None,k=1)
3.6版本新增。从population集群中随机抽取K个元素。weights是相对权重列表,cum_weights是累计权重,两个参数不能同时存在。
random.shuffle(x[,random])
随机打乱序列x内元素的排列顺序。只能针对可变的序列,对于不可变序列,请使用下面的sample()方法。
random.sample(population,k)
从population样本或集合中随机抽取K个不重复的元素形成新的序列。常用于不重复的随机抽样。返回的是一个新的序列,不会破坏原有序列。要从一个整数区间随机抽取一定数量的整数,请使用sample(range(10000000),k=60)类似的方法,这非常有效和节省空间。如果k大于population的长度,则弹出ValueError异常。
五、真值分布
random模块最高端的功能其实在这里。
random.random()
返回一个介于左闭右开[0.0,1.0)区间的浮点数
random.uniform(a,b)
返回一个介于a和b之间的浮点数。如果a>b,则是b到a之间的浮点数。这里的a和b都有可能出现在结果中。
random.triangular(low,high,mode)
返回一个low<=N<=high的三角形分布的随机数。参数mode指明众数出现位置。
random.betavariate(alpha,beta)
β分布。返回的结果在0~1之间
random.expovariate(lambd)
指数分布
random.gammavariate(alpha,beta)
伽马分布
random.gauss(mu,sigma)
高斯分布
random.lognormvariate(mu,sigma)
对数正态分布
random.normalvariate(mu,sigma)
正态分布
random.vonmisesvariate(mu,kappa)
卡帕分布
random.paretovariate(alpha)
帕累托分布
random.weibullvariate(alpha,beta)
六、可选择的生成器
classrandom.SystemRandom([seed])
使用os.urandom()方法生成随机数的类,由操作系统提供源码,不一定所有系统都支持
想要学习热门语言Python一定要选择专业的培训机构,扣丁学堂成立多年,一直秉承用良心做教育的理念,不仅有专业的老师和与时俱进的课程体系,还有大量的Python视频教程供学员观看学习,想要在2018获得高薪的小伙伴们抓紧时间行动吧。扣丁学堂Python技术交流群:279521237。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
uC/OS II针对TMS320C32的移值(老站转)
甲类放大器(Class A Amplifier)
日本丰田明年推出「固态电池电动车」 可能改写全球车业格局
乙类放大器(Class B Amplifier)
请教有关VxWorks的几个问题(老站转)
Linux下的AF_NETLINK 在VxWorks下相当于什么(老站转)
OpenAI奥特曼呼吁台积电扩大产能 不转向英特尔
软银将以 54 亿美元收购ABB机器人业务,推动人工智能和机器人技术的融合
LCD12864测试程序实验
Keil实例教程(三).
服务即软件Service-as-software:面向企业的新控制平面
WinCE+ARM开发及关键技术 下
最新ARM技术和嵌入式技术发展动态 中
USB多媒体2.5W+2.5W音箱设计电路图
最新ARM技术和嵌入式技术发展动态 上
SEMI预测到2030年半导体市场将达到1万亿美元
5G7556CMOS时基电路内部等效电路图
OpenAI携手AMD和三星设定新路线,试图打破NVIDIA和SK AI芯片垄断
WinCE+ARM开发及关键技术 上
最新ARM技术和嵌入式技术发展动态 下
英国前首相里希·苏纳克加入 Microsoft 和 Anthropic 担任顾问
请问:am29f040和am29f040b有和区别(老站转)
带声音告警的温度传感器
Keil 实例教程(五).
Keil实例教程(四).
Keil实例教程(二).
Meta正在收购人工智能芯片初创公司 Rivos
国外USB转串口电路图
国外的USB转串口电路图
21ic上的文章:nucleus(老站转)