python random函数_Python内置类型之random模块

专注统计和Python学习分享

点击上面的statspy关注一下吧

Python内置模块之random

abd32235d7151919a46b8ad27c1747a8.gif

文章导读

random模块是一个产生随机数的模块,很多其他的科学计算相关的第三方包肯定是使用了random模块的,可见它的重要性。

它的功能强大之处不仅仅是产生随机数,重要的是“随机”,可以理解为高度模拟。它的具体实现不去探究,在这里只是介绍它的一些实用方法。

f61f1e97c79579a3f8eb118004b4b1a8.gif

一、随机数生成器

随机数生成器是random模块中产生“随机”效果的核心,这里要说的是初始化一个随机数生成器的主要方法,很简单,即实用方法random.seed()传递一个整数即可,这样子就初始化了一个随机数生成器,才有后面的一系列“随机”的效果。

不同的随机数生成器,得到的随机效果是不同的,也就是说可以通过方法random.seed()传递不同的参数,来改变随机效果,而且在同一个随机数生成器下,产生的随机效果是相同的。这个也叫做随机数种子。

import random as rdfor i in range(3):    rd.seed(1)    print(rd.randint(1,5))print(rd.randint(1,5))

d60358b70882d34372b70121bf4022bb.png

可以看出,在同一个随机数生成器下,调用一个随即效果的函数,得到的结果是相同的,不同的随机数种子下,结果不同。验证了上面的说法。

f61f1e97c79579a3f8eb118004b4b1a8.gif

二、整数相关的随机函数

所谓整数相关的随机函数,就是指它们给出的随机效果是应用在整数范围上。主要是有两个函数:

  • random.randint(a,b),随机地返回闭区间[a,b]上的一个整数。

  • randon.randrange(a,b), 随机地返回左闭右开区间[a,b)上的一个整数,类似range函数。

import random as rddef random_integer(a, b, seed=None):    rd.seed(seed)    num1=rd.randint(a,b) # 1~10随机返回一个整数    num2=rd.randrange(a,b)    return num1,num2for i in range(4):    print(random_integer(1,10))

80db142c4d7401b357e8afc45ae036c8.png

它们的区别就是:一个只返回闭区间,一个返回左闭右开区间的随机整数,而且一般地,我们需要在很大的整数序列中,选择一个随机整数,最好使用random.randrange()。

f61f1e97c79579a3f8eb118004b4b1a8.gif

三、序列相关的随机函数字

这里的序列一般是指:列表,或者集合,元组很少用。主要是四个函数:random.choice(), random.choices(),random.shuffle(),random.sample(),分别的作用是随机地从序列中选择一个,选择多个,打乱一个序列的顺序,以及从序列中随机取样

具体的用法如下:

  • random.choice(seq) 从序列seq中随机地选择一个元素。

  • random.choices(population, weights=None, k=1) 从序列population中随机选择k个元素(可重复),weights指定每个元素的权重。

  • random.shuffle(seq) 打乱一个可变的序列,原始位置上操作。

  • random.sample(population, k) 从序列population中选择k个元素,不重复采样。和random.choices() 很类似。

import random as rddef random_seq(a,b):    rd.seed(1)    lst=[i for i in range(a,b) if i%2!=0]    print('随机地选择一个元素为:', rd.choice(lst))    print('随机地选择多个元素有:',  rd.choices(lst,k=5))    print('重采样选择5个元素:', rd.sample(lst,k=5))    rd.shuffle(lst)    return lstlst=random_seq(1,11)print(lst)

04ef8317b1aec4a0734f46362cb0dcb2.png

可以看到,random.choices()是可以重复选择的,这就表示采样,采样,一般来说,每个个体只能被取到一次或者零次,而不是多次。random.sample()是采样,不能重复选择的。

四、随机分布

这里的随机分布,主要是模拟生成统计学中的一些概率分布的密度函数。还有一个比较特殊的函数,random.random(),它是返回0,1之间的随机小数,不需要传递任何参数。

import random as rdfor i in range(4):    print('第{}次的随机小数为:'.format(i), rd.random())

6cf3508d095719c875b9bd44633dd4e0.png

至于统计学中的各种随机分布的概率密度函数,最重要的就是正态(高斯)分布了,这里也有相关的函数实现,random.gauss(mu,sigma)

print(rd.gauss(0,1))

它返回的是标准正态分布的一个随机点,这样子有什么有用呢?目前我还不知道,肯定是有用的。

至少可以多次取点,做一个简单的验证,验证这些点是不是服从标准正态分布,肯定是能通过正态性检验的,因为这些随机点是来自标准正态分布的。类似的函数还有:

  • random.expovariate(lambda) ,指数分布,需要传递一个参数,λ,也就是theta分之一。

  • random.weibullvariate(alpha,beta) 表示韦布尔分布。

  • random.uniform(a,b) 表示均匀分布,。

  • random.lognormvariate(mu, sigma) 对数正态分布。

  • random.gammavariate(alpha, beta) gamma分布。

import random as rdprint(rd.expovariate(1)) # 这里的lambda似乎就是thetaprint(rd.uniform(0,1))print(rd.lognormvariate(0,1))

a38d9a0d651a503bcbf34187cca04618.png

这些随机分布比较少,后面在numpy包中的random模块中,有更多的统计随机分布函数支持。

内置数据类型之random模块完结!

END

部分图片|来自网络

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

0323c1714230ee74d2a4ad16552a22cd.png

往期回顾

更多精彩

Python内置类型之datetime模块

Python内置类型之time模块

Python内置函数(二)终结

关注我们,扫码了解一下吧

51c18c6f7842d5dd278c351a8a2d93cd.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值