random库20种函数介绍,作用于重现、整数、序列和实数

random库

学习资源: https://docs.python.org/3.7/library/random.html

random主要用于生成随机数,实现各种分布的伪随机数生成器。
在这里插入图片描述

1. Bookkeeping functions(可用于重现的函数)

1.1 random.seed(a=None,version=2)

将random产生的随机数固定,当a=None或缺失时,由系统任意生成,version=2可以忽略。

1.2 random.getstate()

获得当前的随机数产生模式,即random.seed()中的a值。

1.3 random.setstate(state)

state是random.getstate()得到的结果,将随机数产生模式固定为state对应的模式

import random

state = random.getstate() # 获得环境自动决定的产生随机数模式,保存为state
t1 = random.randrange(10) # 在当前模式下产生一个随机数

random.seed(19970509)  # 自己决定的产生随机数模式,a=19970509
t2 = random.randrange(10) # 在19970509模式下产生一个随机数

random.setstate(state) # 再次将模式调整为state
t3 = random.randrange(10) # 在state模式下生成一个随机数

print(t1)
print(t2)
print(t3)

运行结果中,你会发现,t1和t3的值始终相同并且变化,而t2的值永远恒定。

2. 可应用于整数的函数

2.1 random.randrange(stop)/random.randrange(start,stop[,step])

从限定的范围内返回一个随机整数值

import random

t1 = random.randrange(10) # 限定范围为0-10

t2 = random.randrange(1,20,5) # 限定范围为[1,6,11,16]

t3 = random.randrange(1,20) # 限定范围为1-20

print(t1)
print(t2)
print(t3)

3. 可应用于序列的函数

3.1 random.choice(seq)

从一个序列seq中返回一个随机元素,该seq不可空。否则会抛出IndexError异常

import random

seq1 = [1, 4.4, 45, 5, 78]
seq2 = ['第一', '三号', 'mingzhu', '人间失格']
seq3 = [1, 4, 5, '斜阳']

t1 = random.choice(seq1)

t2 = random.choice(seq2)

t3 = random.choice(seq3)

print(t1)
print(t2)
print(t3)
3.2 random.choices(population, weights=None, *,cum_weights=None, k=1)

从population中挑选出k个元素,作为列表返回,population不可为空,否则IndexError异常
weights表示权重;cum_weights表示累积权重。如果两个都不指定,则随机概率均等;如果要指定,则必须要和population元素数相同。注意,同时指定会抛出TypeError异常。

import random

population = [1, 4, 6.6, '人间失格']
weights = [10, 15, 30, 45]     # 指定population中每个元素的权重,即被选中的概率
cum_weights = [10, 25, 55, 100]# 指定population中每个元素的累积权重,其每个元素被选中的概率和weights中指定的一样

t1 = random.choices(population, k=8) # population中每个元素被选中的概率均等
t2 = random.choices(population, weights=weights, k=8)
t3 = random.choices(population, cum_weights=cum_weights, k=8)

print(t1)
print(t2)
print(t3)
3.3 random.shuffle(x[,random])

洗牌,将序列打乱

import random

t1 = [1, 4, 6.6, '人间失格']
t2 = [10, 15, 30, 45]
t3 = [10, 25, 55, 100]

random.shuffle(t1)
random.shuffle(t2)
random.shuffle(t3)

print(t1)
print(t2)
print(t3)
3.4 random.sample(population,k)

从population中取出k个元素,不会重复选择元素,即k不能大于population的元素数;如果k大于population元素数,抛出ValueError异常

import random

t1 = [1, 4, 6.6, '人间失格', 56]
t2 = [10, 15, 30, 45]
t3 = [10, 25, 55, 100]

t1 = random.sample(t1, 4)
t2 = random.choices(t2, k=8)
t3 = random.sample(t3, 4)

print(t1)
print(t2)
print(t3)

4. real-valued attribution(可应用于实数的函数)

4.1 random.random()

返回一个[0,1)之间的随机浮点数

import random

t1 = random.random()
t2 = random.random()
t3 = random.random()

print(t1)
print(t2)
print(t3)
4.2 random.uniform(a,b)

返回一个[a,b)或[a,b]之间的随机浮点数,是否可以取到b,取决于a + (b-a) * random() 公式的计算结果

import random

t1 = random.uniform(2, 10)
t2 = random.uniform(10, 2)
t3 = random.uniform(2, 10)

print(t1)
print(t2)
print(t3)
4.3 random.triangular(low, high, mode)

返回一个介于low和high之间的随机浮点数,默认为0和1之间,mode默认为对称分布的中值。

import random

t1 = random.triangular()
t2 = random.triangular(1, 10)
t3 = random.triangular(10, 1)

print(t1)
print(t2)
print(t3)
4.4 random.betavariate(alpha, beta)

根据β分布,返回一个0-1之间的随机浮点数;alpha,beta参数均要大于0

import random

t1 = random.betavariate(1, 1)
t2 = random.betavariate(2, 2)
t3 = random.betavariate(1, 2)

print(t1)
print(t2)
print(t3)
4.5 random.expovariate(lambd)

根据正态分布,返回一个随机浮点数;lambd不可为0,代表1.0除以期望均值的结果。

import random

t1 = random.expovariate(1)
t2 = random.expovariate(-1)
t3 = random.expovariate(1.0/5)

print(t1)
print(t2)
print(t3)
4.6 random.gammavariate(alpha, beta)

根据gamma分布,返回一个随机浮点数;alpha,beta均需大于0。

import random

t1 = random.gammavariate(1, 1)
t2 = random.gammavariate(10, 10)
t3 = random.gammavariate(1, 10)

print(t1)
print(t2)
print(t3)
4.7 random.gauss(mu, sigma)

根据高斯分布,返回一个随机浮点数;mu为均值,sigma为标准差

import random

t1 = random.gauss(1, 0.1)
t2 = random.gauss(0, 1)
t3 = random.gauss(1, 0)

print(t1)
print(t2)
print(t3)
4.8 random.lognormvariate(mu, sigma)

根据对称正态分布,返回一个随机浮点数;mu为均值,可为任意数;sigma为标准差,必须大于0。

import random

t1 = random.lognormvariate(1, 1)
t2 = random.lognormvariate(0, 10)
t3 = random.lognormvariate(10, 1)

print(t1)
print(t2)
print(t3)
4.9 random.normalvariate(mu, sigma)

根据正态分布,返回一个随机浮点数;mu为均值,sigma为标准差

import random

t1 = random.normalvariate(1, 1)
t2 = random.normalvariate(0, 10)
t3 = random.normalvariate(10, 0)

print(t1)
print(t2)
print(t3)
4.10 random.vonmisesvariate(mu, kappa)

mu为平均角度值,用弧度表示,在0-2*pi之间。kappa为集中参数,应≥0。

import random
import math

t1 = random.vonmisesvariate(2*math.pi/6, 1) # 平均角度设为60°
t2 = random.normalvariate(2*math.pi/6, 10)
t3 = random.normalvariate(2*math.pi/6, 0)

print(t1)
print(t2)
print(t3)
4.11 random.paretovariate(alpha)

根据帕累托分布,返回一个随机浮点数。alpha为形状参数,不可为0

import random

t1 = random.paretovariate(1)
t2 = random.paretovariate(10)
t3 = random.paretovariate(0.1)

print(t1)
print(t2)
print(t3)
4.12 random.weibullvariate(alpha, beta)

根据韦伯分布,返回一个随机浮点数。alpha为尺度参数;beta为形状参数,不可为0

import random

t1 = random.weibullvariate(1, 1)
t2 = random.weibullvariate(1, 10)
t3 = random.weibullvariate(0, 1)

print(t1)
print(t2)
print(t3)

可定义生成器

类random.Random([seed])
import random

t = random.Random(123) # 将随机数生成器固定为123

t1 = t.random()
t2 = t.randrange(10)
t3 = t.randint(1, 10)

print(t1)
print(t2)
print(t3)

数据的重现性

即使用seed方法,可保证数据的重现性

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值