python随机函数怎么用(python中random用法)

python随机函数怎么用(python中random用法)

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

随机是编程的好朋友。很多时候随机可以用来测试程序的运行情况,例如在上一期我们就使用了随机生成的数据进行作图来展示matplotlib的作图功能。当然编程中的随机并不仅限于随机数这一种情况,位置的随机、顺序的随机都属于随机的范畴。在Python中,存在一个自带的random模块,可以让我们很轻松地生成随机数。今天我们就一起来了解一下吧!

一、随机数

随机数是随机最常使用的情形,相应的方法也非常多。

1.随机整数

随机整数通常使用的是randint方法,其相应的参数为随机的下限和上限。与我们常用的range方法不同,在这个方法中下限和上限的数字都是会被随机到的:

此外,还有一种随机整数的方法与我们常用的range方法相似,即randrange方法。其相应的参数为随机的下限、上限以及步长,步长默认为1。这种方法中上限不会被随机到:

在段代码中随机数下限为0,上限为100,步长为2,那么它能够随机到的数为0,2,4,6,…,96,98。

2.随机浮点数

随机整数在本质上是随机浮点数的一种特殊情况,而随机浮点数涉及的情况就比较多了,因为涉及到分布问题。在随机整数中,随机数的分布服从均匀分布,即每个数字被随机到的可能性都是一样的。当然随机浮点书也可以满足这种条件。我们可以使用random方法生成从0到1均匀分布的随机数(不含1):

这种形式的随机数我们在excel中会经常见到,如果我们希望获取从0到某个数的随机小数,可以将随机数乘以这个数。不过在Python中我们还有更方便的方法来实现,那就是uniform方法。uniform方法的两个参数为随机数的上下限(无顺序,谁前谁后都可以),但是不同于random方法,uniform的随机结果会包含上限值:

但很多时候我们想要生成其他分布情况的随机数,比如正态分布。random模块对于多种分布方式都有相应的生成方法。这里我们就只聚一下正态分布的例子。

生成正态分布随机数的方法为normalvariate,其参数分别为mu即平均值,sigma即标准偏差:

其他的分布方法整理如下:

函数

参数

意义

betavariate()

alpha、beta

根据Beta分布返回一个介于0和1之间的随机浮点数(用于统计信息)

expovariate()

lambd

根据指数分布(用于统计信息),返回一个介于0和1之间或如果介于0和-1之间的随机浮点数(如果参数为负)

gammavariate()

alpha、beta

根据Gamma分布返回一个介于0和1之间的随机浮点数(用于统计信息)

gauss()

mu、sigma

根据高斯分布(在概率论中使用)返回介于0和1之间的随机浮点数

lognormvariate()

mu、sigma

根据对数正态分布(用于概率论),返回介于0和1之间的随机浮点数

normalvariate()

mu、sigma

根据正态分布(在概率论中使用)返回介于0和1之间的随机浮点数

vonmisesvariate()

mu、kappa

根据von Mises分布返回0到1之间的一个随机浮点数(用于定向统计)

paretovariate()

alpha

根据帕累托分布(在概率论中使用)返回介于0和1之间的随机浮点数

weibullvariate()

alpha、beta

根据Weibull分布返回0到1之间的随机浮点数(用于统计信息)

二、随机顺序与位置

随机顺序与位置的概念其实比较抽象,我们还是从方法来展示相应的功能。

首先是choice方法,它可以从一个有序的容器中随机挑选一个元素:

在此基础上,如果我们想设定每个元素可能出现的概率(或者说随机的权重),并抽取指定次数形成一个新的列表,那么我们可以使用choices方法。

choices的第一个参数仍然是容器。第二个参数是weights,为各个位置的元素的相对权重。第三个参数是cum_weights,为各个位置的累加权重。第四个参数是k,为选取的次数。这里相对权重是指每个元素出现的可能性。假设我们有六个元素需要随机,每个元素的可能性都是一样的,那我们可以传入一个[1,1,1,1,1,1]的列表,经过计算每个元素出现的概率都是1/6。而累加权重则是从第一个元素到现在这个元素范围内随机选出元素的概率。如果我们把刚才的相对权重转换为累加权重,那么应该是[1,2,3,4,5,6],即第一个元素被随机出的可能性为1,从第一个元素到第二个元素的范围内有元素被随机出的可能性为2,那么第二个元素被随机出的可能性为2-1=1,以此类推。正因如此,weights和cum_weights只设置一个就可以了,即使你输入的是weights参数,程序也会转换为累加权重:

但是我们发现这种随机选取的方法会产生重复值,也就是说有些元素会被重复选中。如果我们希望像采样操作一样选择出一些不重复的元素的话,可以使用sample方法。sample方法的第一个参数还是容器,第二个参数k是进行随机选择的次数。第三个参数counts是每个元素可以被重复抽取的次数,可以是列表形式,默认为None:

此外,还有一个shuffle方法用来打乱容器中元素的顺序,需要注意的是这个方法会打乱原有的列表,因此只能接受可变的容器(如列表),而且返回值为None:

三、随机种子

虽然我们一直在说随机,但是在计算机系统中并不存在真正的随机,而是通过一定的算法生成的。既然如此如果给出相同的条件,那么“随机”的结果也应该是固定的。决定随机结果的因素被称为种子,如果我们在程序运行前设定了固定的种子,那么每次执行程序的结果应当是固定的。我们可以使用seed方法来设定随机种子:

喜欢此内容的人还喜欢

主线教程系列:

【Python教程】铺天盖地的Python广告,点进去却发现门都入不了?

【Python教程】引言——程序是什么,又为什么是程序?

【Python教程】一、懒是人类进步的阶梯,编程则是懒上加懒|Python解释器

【Python教程】二、写一个代码有二百多个秘书伺候着,还愁写不出来好东西?Python的IDE

【Python教程】三、我把骆驼起名叫大象,也能把它装冰箱吗?程序的变量

【Python教程】四、函数真的是含着树吗?程序的函数(一)

【Python教程】五、如果函数是一个工厂|程序的函数(二)

【Python教程】六、如果你给不了我想要的,我就报错给你看|数据类型

【Python教程】七、那么多如果,只剩下结果|if语句和bool值

【Python教程】八、码农一张嘴,程序跑断腿|for循环

【Python教程】九、只要学不死,就往死里学|while 循环和逻辑运算

【Python教程】十、站在巨人的光头上|初识Python模块

【Python教程】十一、泪流满面,下载再也不用度娘了|模块的下载与安装

【Python教程】十三、我连对象都找不到还让我用对象?类与对象(一)

【Python教程】十四、找不到对象?用Python自己写一个|类与对象(二)

【Python教程】十五、动物园举办联欢大会哪个动物没有来?类变量

【Python教程】十六、变量真的是变量名 变量值吗?变量的本质

【Python教程】十七、在Python里搞克隆|浅拷贝与深拷贝

【Python教程】十八、这根本就不是我的错嘛!Python的异常处理

【Python教程】十九、用Python写bug的你,遇到过哪些坑?Python的异常类型

【Python教程】二十、我竟然从全员大筛中领悟到了生成器的用法!迭代器和生成器

【Python教程】二十一、懒出天际!Python中的简洁语法

【Python教程】二十二——奇怪的符号增加了!Python的装饰器

【Python教程】二十三、原来是你!Python的魔法方法(一)

【Python教程】二十四、原来是你!Python的魔法方法(二)

番外系列:

【Python番外】玩大了,一个解释器已经不够用了|Anaconda介绍

【Python番外】写代码宜工工整整,忌放飞自我|代码规范

【Python番外】坑太多了都不知道蹲哪个了|关键字参数和默认值

【Python教程】列表原来是贪吃蛇?列表小技能

【Python教程】列表不是贪吃蛇,是贪吃蚯蚓?列表切片

【Python教程】羊肉串香还是字符串香?都香!字符串小技巧

【Python教程】小练习,写一个“谁在哪儿干什么”的小游戏

【Python教程】加强版列表?字典小技巧

【Python教程】Python中的时间处理——time模块

【Python教程】Python中的时间处理——datetime模块

【Python教程】把文字里的数据“抠”出来|正则表达式和re模块(一)

【Python教程】把文字里的数据“抠”出来|正则表达式和re模块(二)

【Python教程】把文字里的数据“抠”出来|正则表达式和re模块(三)

【Python教程】小练习,用Python解数独(一)

【Python教程】小练习,用Python解数独(二)

【Python教程】小练习,用Python解数独(三)

【Python教程】小练习,用Python解数独(完,内附代码)

Pandas、Numpy系列:

【Python教程】有了它,excel彻底沦为工具人!初识pandas模块(一)

【Python教程】有了它,excel彻底沦为工具人!初识pandas模块(二)

【Python教程】正儿八经地认识一下pandas(一)

【Python教程】正儿八经地认识一下pandas(二)

【Python教程】正儿八经地认识一下pandas(三)

【Python教程】关于pandas,你还应该知道这些(一)

【Python教程】关于pandas,你还应该知道这些(二)

【Python教程】来认识认识Pandas的爹!初识NumPy模块(一)

【Python教程】来认识认识Pandas的爹!初识NumPy模块(二)

【Python教程】来认识认识Pandas的爹!初识NumPy模块(三)

【Python教程】小练习,使用Pandas记记账

【Python教程】关于pandas和numpy,你还应该知道这些(三)

Matplotlib系列(有更新):

【Python教程】pandas matplotlib,数据作图从未如此简单!

【Python教程】matplotlib中的绘图逻辑

【Python教程】matplotlib中的画图区域

【Python教程】matplotlib的基础图表类型

【Python教程】matplotlib的图表元素

【Python教程】matplotlib中的通用参数:线型、标记类型和颜色

【Python教程】matplotlib的柱状图

【Python教程】matplotlib的饼图

【Python教程】matplotlib的直方图

办公自动化系列:

90%的人不曾用过的Word技巧——邮件合并

【Python教程】用Python自动化生成Word文档

【Python教程】用Python自动化生成ppt(一)

【Python教程】用Python自动化生成ppt(二)

【Python教程】用Python自动化生成ppt(三)

左右滑动查看下一篇

发表评论

登录后才能评论