random——伪随机数生成模块
该模块包含构造伪随机数生成器的多个方法。对于整数,伪随机数有统一的选择范围;对于序列,选择的随机元素有统一标准,一个是在当前列表中进行随机排序,另一个是从种子样本中随机生成一个序列。
实际应用中,该模块有专用函数生成符合均匀分布、正态分布、对数分布、负指数分布、伽马分布、贝塔分布的函数。对于生成角,只支持冯·米塞斯分布。几乎所有的模块函数都依赖于基本函数random(),该函数在半开放范围[0.0,1.0)内均匀地生成随机浮点数。Python使用Mersenne Twister作为核心生成器。它生成53位精度浮点数,周期为2 ** 19937-1。
1. 簿记函数
random. seed(a=None, version=2)
初始化随机数生成器。如果a被省略或被赋值为None,则使用当前系统时间为随机源;如果当前操作系统提供随机数源,其优先级高于系统时间。如果a是一个整数,那么直接使用它。
random.getstate()
捕获当前随机数生成器的内部状态,并将其返回。
random.setstate(state)
state应当为在调用该函数之前调用getstate()函数时获取的生成器状态值,并且在执行setatate()后,生成器将会回到以前那个状态。
random. getrandbits(k)
返回一个k位的整数,该整数每位都由随机数构成。
2. 针对整数的随机函数
random. randrange(stop)
random. randrange(start, stop[, step])
该函数等价于choice(range(start, stop, step))或choice(range(stop))意味着给出的随机值属于后面参数定义的值的范围内。
random.randint(a, b)
返回一个随机整数,这个整数大于等于a小于等于b。
3. 针对序列的随机函数
random.choice(seq)
从非空序列seq中随机返回一个元素。
random. choice(population, weights=None, *, cum_weights=None, k=1)
从population中随机选择k个可修改的元素组成一个新的列表,并将其返回。population不能为空。如果weights(权重序列)被给出,选择将会根据相应的权重规划而进行。如果cum_weights被给出,选择将会依据累计权重的方式进行。(类似于:权重序列为[1,2,3,4],累计下来的结果是[1,3,6,10])。
random. shuffle(x[, random])
将序列x随机混合。可选参数random为0参数函数,它会随机返回[0.0, 1.0)内的一个浮点数。
random.sample(population, k)
从population这个序列或集合中随机选择非重复的k个元素组成一个新的列表,该函数用于非替换的随机取样样本。
4. 实数域内概率分布模型所对应函数
该模块内的随机函数,其输出的随机值符合其函数名所示的概率分布模型。
random.random()
从[0.0, 1.0)中随机返回一个浮点数。
random.uniform(a, b)
从a与b确定的范围中随机返回一个浮点数。
random.triangular(low, high, mode)
返回一个随机浮点数N,low<=N<=high,并且mode一定在这个范围内。mode被定义为该区间的重点,给出以它为中点的对称分布。
random.betavariate(alpha, beta)
Beta(β)分布,两个参数必须都大于零,返回值在0与1之间。
random.expovariate(lambd)
指数分布,lambd为1.0处于该分布被期望的均值。
random. gammavariate(alpha, beta)
Gamma(伽马γ)分布,参数必须大于零。分布函数等价于:
x ** (alpha -1) * math.exp(-x / beta)
pdf(x) = --------------------------------------
math.gamma(alpha) * beta ** alpha
random.gauss(mu, sigma)
高斯(正态)分布,mu是均值,sigma是标准差。
random. lognormvariate(mu, sigma)
对数正态分布。如果你在这个分布中采取自然对数,你会得到一个均值为mu,标准差为sigma的正态分布。
random. normalvariate(mu, sigma)
正态分布,比gauss(mu, signa)实现的慢。
random.vonmisesvariate(mu, kappa)
冯米塞斯分布。mu是角的平均弧度,范围[0, 2*pi];kappa是密度参数,它必须大于等于0。当kappa等于0时,该分布退化为[0, 2*pi]上的标准随机分布。
random. paretovariate(alpha)
帕累托分布,alpha是形状参数。
random. weibullvariate(alpha, beta)
威布尔分布,alpha为规模参数,beta是形状参数。
5. 替代产生器
class random. System([seed])
使用os.urandom()函数从操作系统提供的源生成随机数的类。不适用于所有系统。不依赖于软件状态,并且序列不可重现。因此,seed()方法不起作用并被忽略。如果调用getstate()和setstate()方法会引发NotImplementedError。
6. 重复性说明
有时候能够重现伪随机数生成器产生的序列是十分有用的。通过重复使用随机数种子值,只要多个线程没有运行,相同的序列应该在一次又一次的运行中再现。
在Python的版本中,大多数的随机模块实现的算法和种子函数都发生了一定的改变,但有两方面与其他程序中的随机模块没有差别:
①如果一个新的种子模块被添加,那么将配置一个向后兼容的播种机;
②如果给出相同的种子,生成器的random()模块会生成同样的序列。