- betavariate貝塔分布
貝塔分布可以看作是一個(gè)概率的概率分布,例如一個(gè)射擊員歷史命中率為0.39,在一次比賽中,他射中了,可以說(shuō)他的命中率是百分之百嗎?當(dāng)然不能,因?yàn)閿?shù)據(jù)太少,所以需要用到先驗(yàn)概率。在該射擊員沒(méi)有比賽之前我們就有了他的命中率范圍。
貝塔分布的數(shù)學(xué)期望為:
參數(shù):
用途:從貝塔分布中隨機(jī)返回一個(gè)值,范圍在0到1之間
- choice
參數(shù):seq 可迭代對(duì)象
用途: 隨機(jī)返回可迭代對(duì)象的一個(gè)元素,對(duì)象不能為空,若為空會(huì)報(bào)錯(cuò)
例子:
print(random.choice('hello')) # l 只是這次返回l哦,重新執(zhí)行會(huì)隨機(jī)返回其他的,但只會(huì)是h e l o中的任意一個(gè)
print(random.choice([])) # IndexError: Cannot choose from an empty sequence
- choices
參數(shù):
population:可迭代對(duì)象
weights:權(quán)重,列表或元祖,元素類(lèi)型為float
cum_weights:累加權(quán)重,列表或元祖,元素類(lèi)型為float
k:選取次數(shù),類(lèi)型為int
用途: 從可迭代對(duì)象中選取k次數(shù)據(jù),根據(jù)設(shè)置的權(quán)重計(jì)算,最終返回一個(gè)列表
例子:
'''
不設(shè)置權(quán)重的情況下輸出10000次,并記錄各個(gè)元素出現(xiàn)的頻率
'''
num = [1,2,6,9,10]
result = random.choices(num,k=10000)
for i in num:
print('%d出現(xiàn)的頻率為:%f'%(i,result.count(i)/10000))
'''
1出現(xiàn)的頻率為:0.197300
2出現(xiàn)的頻率為:0.199500
6出現(xiàn)的頻率為:0.205500
9出現(xiàn)的頻率為:0.200100
10出現(xiàn)的頻率為:0.197600
通過(guò)結(jié)果可以看出頻率還是很平均的,各個(gè)元素出現(xiàn)的頻率大體一致
'''
————————————————————————————————————————
'''
設(shè)置權(quán)重weights為[0.1,0.2,0.3,0.3,0.1]的情況下輸出10000次,并記錄各個(gè)元素出現(xiàn)的頻率
'''
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出現(xiàn)的頻率為:%f'%(i,result.count(i)/10000))
'''
1出現(xiàn)的頻率為:0.100000
2出現(xiàn)的頻率為:0.197800
6出現(xiàn)的頻率為:0.307200
9出現(xiàn)的頻率為:0.298600
10出現(xiàn)的頻率為:0.096400
從結(jié)果可以看出,每個(gè)元素的頻率接近于它們的權(quán)重
'''
——————————————————————————————————————
'''
設(shè)置累加權(quán)重[0.1,0.2,0.3,0.3,0.1]的情況下輸出10000次,并記錄各個(gè)元素出現(xiàn)的頻率
'''
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出現(xiàn)的頻率為:%f' % (i, result.count(i) / 10000))
'''
cum_weight = [1,5,3,4,5] 反推weight為[1,1,1,1,1]
所以結(jié)果為:
1出現(xiàn)的頻率為:0.193400
2出現(xiàn)的頻率為:0.203000
6出現(xiàn)的頻率為:0.199700
9出現(xiàn)的頻率為:0.200400
10出現(xiàn)的頻率為:0.203500
'''
- expovariate
參數(shù):float類(lèi)型
用途:返回指數(shù)分布的隨機(jī)浮點(diǎn)數(shù) - gauss
參數(shù):
用途:返回高斯分布的隨機(jī)浮點(diǎn)數(shù) - gammavariate
參數(shù):
alpha:
beta:
用途:返回gamma分布的隨機(jī)浮點(diǎn)數(shù) - getstate
參數(shù):
用途:
例子:
- getrandbits
參數(shù):k int類(lèi)型
用途: 返回k位長(zhǎng)的隨機(jī)整數(shù)。
例子:
'''
4位長(zhǎng)的數(shù)字為0-15,輸出100次,看結(jié)果是什么
'''
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
參數(shù):
用途: 返回對(duì)數(shù)正態(tài)分布的隨機(jī)浮點(diǎn)數(shù) - normalvariate
參數(shù):
用途: 返回正態(tài)分布的隨機(jī)浮點(diǎn)數(shù) - paretovariate
參數(shù):
用途: 返回帕累托分布的隨機(jī)浮點(diǎn)數(shù) - randrange
參數(shù):
start:開(kāi)始數(shù)a
stop:結(jié)束數(shù)b
step:步長(zhǎng)k
用途: [a , a+k,a+2k,……,b)隨機(jī)返回該序列中的一個(gè)值,如果不指定a或k則默認(rèn)為0
例子:
print(random.randrange(1,4,2)) # 只能在1,3中隨機(jī)返回一個(gè)值
random
參數(shù):無(wú)
用途:隨機(jī)生成一個(gè)[0,1]的浮點(diǎn)數(shù)randint
參數(shù):
a:int
b:int
用途:隨機(jī)生成[a,b]范圍內(nèi)的一個(gè)整數(shù)
例子:
result_set = set()
for i in range(100):
result_set.add(random.randint(1, 3))
print(result_set) # {1, 2, 3}
- seed
參數(shù):
a:
version:int
用途:a為改變隨機(jī)數(shù)生成器的種子,如果使用固定的a,則每次生成的隨機(jī)數(shù)相同;如果不設(shè)置a,則系統(tǒng)根據(jù)時(shí)間自己動(dòng)態(tài)設(shè)置,此時(shí)每次生成的隨機(jī)數(shù)會(huì)因時(shí)間差異而不同。
例子:
random.seed(1)
print(random.random()) # 0.13436424411240122
'''
無(wú)論執(zhí)行多少次這個(gè)值都不會(huì)變
'''
- sample
參數(shù):
population:可迭代對(duì)象
k:每次選取的元素個(gè)數(shù)
用途:每次從可迭代對(duì)象中隨機(jī)挑選k個(gè)元素封裝在一個(gè)列表里返回
例子:
population = [1,2,6,9,10]
print(random.sample(population=population,k=2))
sample和choices中的k的區(qū)別:sample為只挑選一次,一次挑選k個(gè)元素。choices為挑選k次,一次只挑選一個(gè)元素
- shuffle
參數(shù):lst:列表【只能是list類(lèi)型,元組、字符串、集合等都不行】
用途:隨機(jī)打亂序列l(wèi)st的順序并重新排序,無(wú)返回值,另外lst只能是一個(gè)可變序列,且只支持有下標(biāo)的序列
例子:
lis = [1,3,6]
print(random.shuffle(lis))
print(lis) # [6,1,3]
- setstate
參數(shù):
用途:
例子:
- triangular
參數(shù):
low:float
high:float
mode:
用途: 返回low和high之間的隨機(jī)浮點(diǎn)數(shù),如果指定mode 參數(shù),mode的取值會(huì)使其更接近其他兩個(gè)參數(shù)值之一。mode參數(shù)默認(rèn)為其他兩個(gè)參數(shù)值之間的中點(diǎn),此時(shí)它將不會(huì)權(quán)衡任何方向的可能結(jié)果。
例子:
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默認(rèn)為(a+b)/2,此時(shí)結(jié)果為:
接近b有43次
接近a有57次
在中間有0次
當(dāng)mode=(a+b)/2+1時(shí),結(jié)果為:
接近b有69次
接近a有31次
在中間有0次
當(dāng)mode=(a+b)/2-1時(shí),結(jié)果為:
接近b有26次
接近a有74次
在中間有0次
'''
- uniform
參數(shù):
a:float
b:float
用途:返回a,b之間的隨機(jī)一個(gè)浮點(diǎn)數(shù),這里的a可以小于b - vonmisesvariate
參數(shù):
用途: 返回具有von Mises分布或圓形正態(tài)分布的隨機(jī)浮點(diǎn)數(shù)。 - weibullvariate
參數(shù):
用途: 返回Weibull分布的隨機(jī)浮點(diǎn)數(shù)