美文网首页
Python random 模块详解

Python random 模块详解

作者: a479a910abe7 | 来源:发表于2018-07-18 15:45 被阅读0次

    我们可以先来了解下伪随机数和真随机数的概念。

    伪随机数:伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并> > 能通过随机数检验的伪随机数,以保证计算结果的随机性。</br>
    ---百度百科

    真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等,这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。</br>
    ---百度百科

    如果觉得上述定义过于笼统的话,可以参考下这篇博客:https://blog.csdn.net/czc1997/article/details/78167705

    以下内容基于 Python 3.6 版本 </br>
    参考文档:https://docs.python.org/3/library/random.html

    Python 的 random 模块概述

    根据 Python 官方文档的说明,random 模块提供了不同分布下伪随机数生成器的实现。并且以梅森旋转算法(Mersenne Twister)作为生成器内核进行随机数生成。

    random 模块函数列举

    基础方法
    random.seed(a=None, version=2)

    当 a 的值没有设置时,则会使用当前系统时间作为 a 的值传入。从下面的例子中可以看出,设置 seed() 函数传入一个固定值的时候,生成的下一个随机数也会是固定的。

    >>> import random
    
    >>> random.seed(1)
    >>> random.random()
    0.13436424411240122
    
    >>> random.seed(1)
    >>> random.random()
    0.13436424411240122
    
    >>> random.seed(1)
    >>> random.random()
    0.13436424411240122
    
    random.getstate()

    返回一个捕获到的 生成器当前内部状态 的对象,可以将此对象传递给 setstate() 以恢复到这个状态。

    random.setstate()

    state 应该是从之前调用 getstate() 获得的,而 setstate() 将生成器的内部状态恢复到调用 getstate() 时的状态。根据下面的例子可以看出,由于生成器内部状态相同时会生成相同的下一个随机数,我们可以使用 getstate() 和 setstate() 对生成器内部状态进行获取和重置到某一状态下。

    >>> import random
    
    >>> state = random.getstate()
    >>> random.random()
    0.15039710215996194
    >>> random.random()
    0.29023339773680357
    
    >>> random.setstate(state)
    >>> random.random()
    0.15039710215996194
    
    random.getrandbits(k)

    返回一个 0~2^k 的随机整数,该方法随 Mersenne Twister 一起提供,getrandbits() 可以使 randrange() 能够处理任意大的范围。

    整数方法
    random.randrange(stop)
    random.randrange(start, stop[, step])

    从 range(start, stop[, step]) 中选择一个随机数返回,但其实并不会创建一个 range(start, stop[, step])

    random.randint(a, b)

    返回 [a,b] 范围内的整数,它实际上来自于 random.randrange(a, b+1)

    序列方法
    random.choice(seq)

    从非空序列 seq 中随机选取一个元素返回,如果 seq 为空,则会引发 IndexError 。

    random.choices(population, weights=None, *, cum_weights=None, k=1)

    从 population 序列中随机选取 k 个元素组成列表并返回,如果 population 为空则引发 IndexError 。

    random.shuffle(x[, random])

    随机打乱序列 x 中的元素排列,可选参数random是一个无参函数,在[0.0,1.0)中返回随机浮点数,默认情况下使用 random() 函数。另外,x 必须是可变序列。如果想打乱不可变序列的元素排列,可以使用 sample(x, k=len(x)) 。

    random.sample(population, k)

    从 population 序列中随机不重复选取 k 个元素组成列表并返回,并且不会对原序列造成任何影响。返回的列表将按照选择的顺序进行排列。如果 k 大于 population,则会引发 ValueError 。

    真值分布
    random.random()

    返回 [0.0, 1.0) 范围内的下一个随机浮点数。

    random.uniform(a, b)

    返回 [a, b] 范围内的随机浮点数。

    random.triangular(low, high, mode)
    random.betavariate(alpha, beta)

    β分布。返回的结果在0~1之间

    random.expovariate(lambd)

    指数分布。 lambd是1.0除以所需的平均值。它应该是非零的。

    random.gammavariate(alpha, beta)

    Gamma分布。 (不是伽玛函数!)参数的条件是alpha> 0和beta> 0。

    random.gauss(mu, sigma)

    高斯分布。 mu是平均值,sigma是标准偏差。这比下面定义的normalvariate()函数稍快。

    random.lognormvariate(mu, sigma)

    记录正态分布。如果你采用这个分布的自然对数,你将获得具有平均μ和标准偏差西格玛的正态分布。 mu可以有任何值,sigma必须大于零。

    random.normalvariate(mu, sigma)

    正态分布。 mu是平均值,sigma是标准偏差。

    random.vonmisesvariate(mu, kappa)

    卡帕分布

    random.paretovariate(alpha)

    帕累托分布。 alpha是形状参数。

    random.weibullvariate(alpha, beta)

    威布尔分布。 alpha是scale参数,beta是shape参数。

    相关文章

      网友评论

          本文标题:Python random 模块详解

          本文链接:https://www.haomeiwen.com/subject/zinopftx.html