【Python 标准库解读】伪随机数生成库 — random

欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/


随机函数在很多科学计算中都会用到,比如生成一系列随机数来计算平均值、高斯分布、伽马分布、贝塔分布、对数正态分布等。

几乎所有模块函数都依赖于基本函数 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] 内返回一个随机浮点数
randint(a, b) 在指定范围 [a, b] 内返回一个随机整数
choice(seq) 从非空序列 seq 中返回一个随机元素
sample(population, k) 返回在多个字符中(population)生成指定数量(k)的随机字符
randrange(start, stop[, step]) 在指定范围(start, stop) 内返回一个间隔为 step 的随机整数,step 为可选参数
shuffle(x) 将序列 x 随机打乱位置
triangular(low, high, mode) 返回三角形分布的随机数,low、high 为返回值的上下限,mode 为中值
betavariate(alpha, beta) 求 Beta 分布的随机数,其中 alpha > 0beta > 0,返回值的范围介于 0 和 1 之间
expovariate(lambd) 指数分布,lambd 是 1.0 除以所需的平均值,它应该是非零的
如果 lambd 为正,则返回值的范围为 0 到正无穷大
如果 lambd 为负,则返回值的范围为负无穷大到 0
gammavariate(alpha, beta) Gamma 分布,参数的条件是 alpha > 0beta > 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.randint(a, b)

在指定范围 [a, b] 内获取随机整数

>>> import random
>>> random.randint(1, 20)
8

random.choice(seq)

从非空序列 seq 中返回一个随机元素

>>> import random
>>> random.choice('tomorrow')
'o'
>>> random.choice(['python', 'c++', 'java'])
'java'

random.sample(population, k)

返回在多个字符中(population)生成指定数量(k)的随机字符

>>> import random
>>> random.sample('dsabkl2498sjdsa8asd7f0',5)
['f', '2', 'a', 's', 's']

random.randrange(start, stop[, step])

在指定范围内 (start, stop) 返回一个间隔为 step 的随机整数,step 为可选参数

>>> import random
>>> print(random.randrange(0, 10, 5))
5
>>> print(random.randrange(0, 11, 5))
10
>>> print(random.randrange(0, 10))
7

random.shuffle(x)

将序列 x 随机打乱位置

>>> a = [1, 2, 3, 4, 5]
>>> random.shuffle(a)
>>> a
[2, 5, 4, 1, 3]

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章