Python Random模块使用

参考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>b bNa
    端点值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.0
0.37444887175646646
>>> random.uniform(1, 10)  # Random float x, 1.0 <= x < 10.0
1.1800146073117523
>>> random.randint(1, 10)  # Integer from 1 to 10, endpoints included
7
>>> random.randrange(0, 101, 2)  # Even integer from 0 to 100
26
>>> 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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值