天天看点

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

专注统计和Python学习分享

点击上面的statspy关注一下吧

Python内置模块之random

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

文章导读

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

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

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

一、随机数生成器

随机数生成器是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))
           
python random函数_Python内置类型之random模块

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

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

二、整数相关的随机函数

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

  • 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))
           
python random函数_Python内置类型之random模块

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

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

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

这里的序列一般是指:列表,或者集合,元组很少用。主要是四个函数: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)
           
python random函数_Python内置类型之random模块

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

四、随机分布

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

import random as rdfor i in range(4):    print('第{}次的随机小数为:'.format(i), rd.random())
           
python random函数_Python内置类型之random模块

至于统计学中的各种随机分布的概率密度函数,最重要的就是正态(高斯)分布了,这里也有相关的函数实现,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))
           
python random函数_Python内置类型之random模块

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

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

END

部分图片|来自网络

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

我们一起愉快的玩耍吧

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

往期回顾

更多精彩

Python内置类型之datetime模块

Python内置类型之time模块

Python内置函数(二)终结

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

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