该模块实现了各种分布的伪随机数生成器。可以在区间内抽取一个随机数,可以在列表中抽取一个元素,可以从分布中抽取样本 。
random模块不能直接访问,需要导入 random 模块,然后通过 random 静态对象调用该方法。
import random
1 生成随机数
随机生成器种子,在同一个种子下,生成同样的随机数
random.seed()
返回 [0, 1.0) 范围内的下一个随机浮点数。
random.random()
random.int(a,b) 生成整数,a <= N <= b。
random.randint(1,4) #
2
2 序列中随机选取一个
在序列range() 中随机选取一个整数random.randrange( start, stop , step )
random.randrange(1,5,2)
3
random.choice(population), 从非空序列 population 返回一个随机元素。 如果 seq 为空,则引发 IndexError.
random.choice([2,5,8])
8
random.choices(population, weights=None, *, cum_weights=None, k) . 从整体中按照权重抽取K个,权重序列长度必须等于population长度。 显然,不给定权重且k=1. 等价于
random.choice(population).
random.choices(['red', 'black', 'green'], [4, 10, 2], k=6)
['green', 'black', 'red', 'black', 'green', 'black']
random.sample(population, k, *, counts=None),返回从总体序列或集合中选择的唯一元素的 k 长度列表,即无重复(无放回)的随机抽样。
random.sample(['red', 'black', 'green'], 2)
['red', 'green']
3.9版本之后,增加counts 形参,可以指定个数, random.sample([‘red’, ‘red’,‘red’,‘black’, ‘green’], 2)等价于random.sample([‘red’,‘black’, ‘green’],counts=[3,1,1], 2)
3从分布中抽取样本
常用的分布如下表:
函数 | 分布 |
---|---|
gauss(mu,sigma)/normalvarite(mu,sigma) | 正态分布 |
uniform(a,b) | 均匀分布 |
expovariate(lamda) | 指数分布 |
gammavariate(alpha,beta) | Gamma 分布 |
lognormvariate(mu,sigma) | 对数正态分布 |
betavariate(alpha,beta) | Beta 分布 |
weibullvariate(alpha,beta) | Weibull 分布 |
paretovariate(alpha) | Pareto 分布 |
vonmisesvariate(mu,kappa) | von Mises 分布( |
random.gauss(1,2)
-0.34372692554557815
random.uniform(1,2)
1.7719936383153665
random.expovariate(1)
0.079384517694696
random.gammavariate(1,3)
3.8134444290373866
random.lognormvariate(1,2)
2.561312589509173
random.betavariate(1,2)
0.03565784800319274
random.weibullvariate(1,2)
1.211306128111137
random.paretovariate(1)
1.709941711311189
random.vonmisesvariate(1,2)
2.377632588889548
data = [random.gammavariate(2,4) for i in range(10000)] # 抽取10000个gamma分布样本
#直方图
import matplotlib.pyplot as plt
plt.hist(data, bins=100, color="#FF0000", alpha=.7)
4 打乱顺序
random.shuffle(x [, random])将序列 x 随机打乱位置。
a=[1,3,5,7,9]
random.shuffle(a);print(a)
[3, 7, 5, 1, 9] # 原地打乱顺序