Python Random模块使用

来源:互联网 发布:淘宝买家如何删除评价 编辑:程序博客网 时间:2024/05/25 19:58

参考Python 2.7.13编写,英文好的同学可以直接阅读官方解释。

random模块简介

random模块实现了多种分布的伪随机数分布器。

random模块可以从范围(range)内随机选取一个整数;从序列(sequence)中,选取一个随机的元素;对一个列表(list)进行伪随机排列,或伪随机取样。

random模块也可以计算均匀、正态(高斯)、对数正态、负指数、gamma(伽马)、beta(贝塔)分布。同样也可以使用Mises分布来生成角度的分布。

random函数介绍

记账簿函数:

  • random.seed(a=None):初始化伪随机数生成器内部的状态。
    • 如果参数为None或没有参数传入,则将会使用系统当前时间或特定的随机源初始化(参考os.urandom()参看详情)。
    • 如果传入整数int或long,则将使用hash(a)进行初始化。
  • random.setstate(state):返回描述当前生成器状态的对象。该对象可以传给setstate()来复原状态。
  • random.setstate(state):state为getstate()返回的对象,setstate()会将生成器内部状态重置为调用getstate()时的状态。
  • random.jumpahead(n):将内部状态变为与当前状态差异极大的状态。n为一个非负整数用于扰乱当前状态向量。

整数相关的函数:

  • random.randrange(stop); random.randrange(start, stop[, step]): 返回一个从range(start, stop, step)中随机选取的整数。该函数与choice(range(start,stop,step))等价,但不会实际构造range对象。
  • random.randint(a, b): 返回一个[a,b]范围内的整数N。

序列(sequences)相关的函数:

  • random.choice(seq):从非空序列seq中随机返回一个元素。如果seq为空,则返回IndexError。
  • random.shuffle(x[, random]):在索引空间内对序列x进行随机重排(洗牌)。可选参数random为返回[0.0,1.0)内浮点数的无参函数,默认该函数为random()。
    即使是对于较小的len(x), x排列的总数也大于大多数随机数生成器的周期;这意味着一个长序列的大部分排列将永远不会出现。
  • random.sample(population, k):从population序列随机选取k个元素以列表形式(list)返回。原population序列将不会改变。

生成随机实数分布

以下函数用于生成特定的实数分布。函数的参数为相应分布方程中的参数;大部分分布方程都可以在统计学资料中找到。

  • random.random():返回一个[0.0,1.0)范围内的随机数。
  • random.uniform(a, b):返回随机浮点数N,满足:若ab,则aNb;若a>bbNa
    端点值b是否包含在区间内取决于方程a+(ba)random()的浮点边界。
  • random.triangular(low, high, mode):返回一个随机浮点数N,满足:lowNhigh这些边界间特定的模式。low与high默认为0和1,mode默认为区间中点,形成对称分布。
  • random.betavariate(alpha, beta):Beta分布,参数需满足alpha>0 并且beta>0。返回0到1范围内的值。
  • random.expovariate(lambd):指数分布。lambd为1除以指定的非零期望。其参数为lambda,但是Python中的一个保留字。若lambd为正,则返回值范围为0到正无穷,否则为负无穷到零。
  • random.gammavariate(alpha, beta):gamma分布。(并非gamma函数!)参数满足alpha>0并且belta>0
    其概率分布函数为
          x ** (alpha - 1) * math.exp(-x / beta)pdf(x) =  --------------------------------------            math.gamma(alpha) * beta ** alpha
  • random.gauss(mu, sigma):高斯分布。mu为均值,sigma为标准差,该函数比下面定义的random.gauss(mu, sigma)函数稍快。
  • random.lognormvariate(mu, sigma):对数正态分布。对该分布取对数可以获得以mu为均值、sigma为标准差的正态分布。mu可为任意值,sigma必须大于0。
  • random.normalvariate(mu, sigma):正态分布。mu为均值,sigma为标准差。
  • random.vonmisesvariate(mu, kappa):mu为平均角度,以弧度表示,范围为0到2π, kappa为浓度参数,需大于等于零。如果kappa等于零,这该分布退化为区间0到2π的平均分布。
  • random.paretovariate(alpha):帕雷拓分布,alpha为其形状参数。
  • random.weibullvariate(alpha, beta):威布尔分布,alpha为缩放参数,belta为形状参数。

可用的生成器

示例

>>> random.random()        # Random float x, 0.0 <= x < 1.00.37444887175646646>>> random.uniform(1, 10)  # Random float x, 1.0 <= x < 10.01.1800146073117523>>> random.randint(1, 10)  # Integer from 1 to 10, endpoints included7>>> random.randrange(0, 101, 2)  # Even integer from 0 to 10026>>> random.choice('abcdefghij')  # Choose a random element'c'>>> items = [1, 2, 3, 4, 5, 6, 7]>>> random.shuffle(items)>>> items[7, 3, 2, 5, 6, 4, 1]>>> random.sample([1, 2, 3, 4, 5],  3)  # Choose 3 elements[4, 1, 5]
原创粉丝点击