random库20种函数介绍,作用于重现、整数、序列和实数
- random库
- 1. Bookkeeping functions(可用于重现的函数)
- 2. 可应用于整数的函数
- 3. 可应用于序列的函数
- 4. real-valued attribution(可应用于实数的函数)
- 4.1 random.random()
- 4.2 random.uniform(a,b)
- 4.3 random.triangular(low, high, mode)
- 4.4 random.betavariate(alpha, beta)
- 4.5 random.expovariate(lambd)
- 4.6 random.gammavariate(alpha, beta)
- 4.7 random.gauss(mu, sigma)
- 4.8 random.lognormvariate(mu, sigma)
- 4.9 random.normalvariate(mu, sigma)
- 4.10 random.vonmisesvariate(mu, kappa)
- 4.11 random.paretovariate(alpha)
- 4.12 random.weibullvariate(alpha, beta)
- 可定义生成器
- 数据的重现性
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方法,可保证数据的重现性