random——伪随机数生成模块

random——伪随机数生成模块

转自:https://blog.csdn.net/zhtysw/article/details/79978197

       该模块包含构造伪随机数生成器的多个方法。对于整数,伪随机数有统一的选择范围;对于序列,选择的随机元素有统一标准,一个是在当前列表中进行随机排序,另一个是从种子样本中随机生成一个序列。

       实际应用中,该模块有专用函数生成符合均匀分布、正态分布、对数分布、负指数分布、伽马分布、贝塔分布的函数。对于生成角,只支持冯·米塞斯分布。几乎所有的模块函数都依赖于基本函数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()模块会生成同样的序列。

猜你喜欢

转载自www.cnblogs.com/langqi250/p/10854820.html