- betavariate贝塔分布
贝塔分布可以看作是一个概率的概率分布,例如一个射击员历史命中率为0.39,在一次比赛中,他射中了,可以说他的命中率是百分之百吗?当然不能,因为数据太少,所以需要用到先验概率。在该射击员没有比赛之前我们就有了他的命中率范围。
贝塔分布的数学期望为:
参数:
用途:从贝塔分布中随机返回一个值,范围在0到1之间
- choice
参数:seq 可迭代对象
用途: 随机返回可迭代对象的一个元素,对象不能为空,若为空会报错
例子:
print(random.choice('hello')) # l 只是这次返回l哦,重新执行会随机返回其他的,但只会是h e l o中的任意一个
print(random.choice([])) # IndexError: Cannot choose from an empty sequence
- choices
参数:
population:可迭代对象
weights:权重,列表或元祖,元素类型为float
cum_weights:累加权重,列表或元祖,元素类型为float
k:选取次数,类型为int
用途: 从可迭代对象中选取k次数据,根据设置的权重计算,最终返回一个列表
例子:
'''
不设置权重的情况下输出10000次,并记录各个元素出现的频率
'''
num = [1,2,6,9,10]
result = random.choices(num,k=10000)
for i in num:
print('%d出现的频率为:%f'%(i,result.count(i)/10000))
'''
1出现的频率为:0.197300
2出现的频率为:0.199500
6出现的频率为:0.205500
9出现的频率为:0.200100
10出现的频率为:0.197600
通过结果可以看出频率还是很平均的,各个元素出现的频率大体一致
'''
————————————————————————————————————————
'''
设置权重weights为[0.1,0.2,0.3,0.3,0.1]的情况下输出10000次,并记录各个元素出现的频率
'''
num = [1, 2, 6, 9, 10]
weight = [0.1,0.2,0.3,0.3,0.1]
result = random.choices(num,weights=weight,k=10000)
for i in num:
print('%d出现的频率为:%f'%(i,result.count(i)/10000))
'''
1出现的频率为:0.100000
2出现的频率为:0.197800
6出现的频率为:0.307200
9出现的频率为:0.298600
10出现的频率为:0.096400
从结果可以看出,每个元素的频率接近于它们的权重
'''
——————————————————————————————————————
'''
设置累加权重[0.1,0.2,0.3,0.3,0.1]的情况下输出10000次,并记录各个元素出现的频率
'''
num = [1, 2, 6, 9, 10]
cum_weight = [1,2,3,4,5]
result = random.choices(num, cum_weights=cum_weight,k=10000)
for i in num:
print('%d出现的频率为:%f' % (i, result.count(i) / 10000))
'''
cum_weight = [1,5,3,4,5] 反推weight为[1,1,1,1,1]
所以结果为:
1出现的频率为:0.193400
2出现的频率为:0.203000
6出现的频率为:0.199700
9出现的频率为:0.200400
10出现的频率为:0.203500
'''
- expovariate
参数: float类型
用途:返回指数分布的随机浮点数 - gauss
参数:
用途:返回高斯分布的随机浮点数 - gammavariate
参数:
alpha:
beta:
用途:返回gamma分布的随机浮点数 - getstate
参数:
用途:
例子:
- getrandbits
参数:k int类型
用途: 返回k位长的随机整数。
例子:
'''
4位长的数字为0-15,输出100次,看结果是什么
'''
result = set()
for i in range(100):
result.add(random.getrandbits(4))
print(result) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
- lognormvariate
参数:
用途: 返回对数正态分布的随机浮点数 - normalvariate
参数:
用途: 返回正态分布的随机浮点数 - paretovariate
参数:
用途: 返回帕累托分布的随机浮点数 - randrange
参数:
start:开始数a
stop:结束数b
step:步长k
用途: [a , a+k,a+2k,……,b)随机返回该序列中的一个值,如果不指定a或k则默认为0
例子:
print(random.randrange(1,4,2)) # 只能在1,3中随机返回一个值
random
参数:无
用途:随机生成一个[0,1]的浮点数randint
参数:
a:int
b:int
用途:随机生成[a,b]范围内的一个整数
例子:
result_set = set()
for i in range(100):
result_set.add(random.randint(1, 3))
print(result_set) # {1, 2, 3}
- seed
参数:
a:
version:int
用途:a为改变随机数生成器的种子,如果使用固定的a,则每次生成的随机数相同;如果不设置a,则系统根据时间自己动态设置,此时每次生成的随机数会因时间差异而不同。
例子:
random.seed(1)
print(random.random()) # 0.13436424411240122
'''
无论执行多少次这个值都不会变
'''
- sample
参数:
population:可迭代对象
k:每次选取的元素个数
用途:每次从可迭代对象中随机挑选k个元素封装在一个列表里返回
例子:
population = [1,2,6,9,10]
print(random.sample(population=population,k=2))
sample和choices中的k的区别:sample为只挑选一次,一次挑选k个元素。choices为挑选k次,一次只挑选一个元素
- shuffle
参数:lst:列表【只能是list类型,元组、字符串、集合等都不行】
用途:随机打乱序列lst的顺序并重新排序,无返回值,另外lst只能是一个可变序列,且只支持有下标的序列
例子:
lis = [1,3,6]
print(random.shuffle(lis))
print(lis) # [6,1,3]
- setstate
参数:
用途:
例子:
- triangular
参数:
low:float
high:float
mode:
用途: 返回low和high之间的随机浮点数,如果指定mode 参数,mode的取值会使其更接近其他两个参数值之一。mode参数默认为其他两个参数值之间的中点,此时它将不会权衡任何方向的可能结果。
例子:
a = 1.0
b = 4.0
max_ab = 0
min_ab = 0
equ_ab = 0
for i in range(100):
num = random.triangular(a, b, (a+b)/2)
if num > (b+a)/2:
max_ab += 1
elif num < (b+a)/2:
min_ab += 1
else:
equ_ab += 1
print('接近b有%d次'%max_ab)
print('接近a有%d次' % min_ab)
print('在中间有%d次' % equ_ab)
'''
mode默认为(a+b)/2,此时结果为:
接近b有43次
接近a有57次
在中间有0次
当mode=(a+b)/2+1时,结果为:
接近b有69次
接近a有31次
在中间有0次
当mode=(a+b)/2-1时,结果为:
接近b有26次
接近a有74次
在中间有0次
'''
- uniform
参数:
a:float
b:float
用途:返回a,b之间的随机一个浮点数,这里的a可以小于b - vonmisesvariate
参数:
用途: 返回具有von Mises分布或圆形正态分布的随机浮点数。 - weibullvariate
参数:
用途: 返回Weibull分布的随机浮点数