随机函数在很多科学计算中都会用到,比如生成一系列随机数来计算平均值、高斯分布、伽马分布、贝塔分布、对数正态分布等。
几乎所有模块函数都依赖于基本函数 random() ,它在半开放区间 [0.0,1.0) 内均匀生成随机浮点数。 Python 使用 Mersenne Twister 作为核心生成器。 它产生 53 位精度浮点数,周期为 219937-1 ,其在 C 中的底层实现既快又线程安全。 Mersenne Twister 是现存最广泛测试的随机数发生器之一。 但是,因为完全确定性,它不适用于所有目的,并且完全不适合加密目的。
random 模块官方文档:https://docs.python.org/3/library/random.html
random 模块部分常用函数:
函数 | 功能 |
---|---|
random() | 返回一个在 [0.0, 1.0) 范围内的随机浮点数 |
uniform(a, b) | 在指定范围内([a, b] )返回一个随机浮点数 N |
triangular(low, high, mode) | 返回三角形分布的随机数,low、high 为返回值的上下限,mode 为中值 |
betavariate(alpha, beta) | 求 Beta 分布的随机数,其中 alpha > 0 、beta > 0 ,返回值的范围介于 0 和 1 之间 |
expovariate(lambd) | 指数分布,lambd 是 1.0 除以所需的平均值,它应该是非零的 如果 lambd 为正,则返回值的范围为 0 到正无穷大 如果 lambd 为负,则返回值的范围为负无穷大到 0 |
gammavariate(alpha, beta) | Gamma 分布,参数的条件是 alpha > 0 和 beta > 0 |
gauss(mu, sigma) | 高斯分布,mu 是平均值,sigma 是标准差 |
lognormvariate(mu, sigma) | 对数正态分布,mu 是平均值,sigma 是标准差,mu 可以是任何值,sigma 必须大于零 |
normalvariate(mu, sigma) | 正态分布,mu 是平均值,sigma 是标准差 |
vonmisesvariate(mu, kappa) | 冯·米塞斯分布(von Mises),mu 是平均角度,以弧度表示,介于 0 和 2 * pi 之间 kappa 是浓度参数,必须大于或等于零 如果 kappa 等于零,则该分布在 0 到 2 * pi 的范围内减小到均匀的随机角度 |
paretovariate(alpha) | 帕累托分布,alpha 是形状参数 |
weibullvariate(alpha, beta) | 威布尔分布,alpha 是比例参数,beta 是形状参数 |
常见函数应用举例:
random.random()
生成一个在 0.0 <= x < 1.0 之间的浮点数
>>> import random # 导入 random 模块
>>> random.random() # 调用 random() 方法
0.7811493181713127 # 随机生成一个大于等于 0,小于 1 的浮点数
random.uniform(a, b)
在指定范围 [a, b] 内获取随机数
>>> import random
>>> random.uniform(-5, 5)
-4.117969777026395
>>> random.uniform(-10, -5)
-8.257739458506384
>>> random.uniform(1.8, 9.2)
8.129467781976114
random.triangular(low, high, mode)
返回三角形分布的随机数,返回的随机浮点数 N 满足 low <= N <= high,并且在这些边界之间指定 mode,low 和 high 默认值为 0 和 1,mode 参数默认为边界之间的中点,持续使用该函数,可以得到以 mode 为对称点的随机分布数据集(在图上体现为一个三角形分布)
>>> import random
>>> random.triangular()
0.3604089623206311
>>> random.triangular(0,10)
7.215758147092778
>>> random.triangular(0,10,15)
10.965963151355984
random.betavariate(alpha, beta)
求 Beta 分布,参数条件:alpha > 0,beta > 0,返回值介于 0 ~ 1 之间
>>> import random
>>> random.betavariate(4, 9)
0.13445358577865857