python進(jìn)階——random模塊的常用方法

  1. betavariate貝塔分布

貝塔分布可以看作是一個(gè)概率的概率分布,例如一個(gè)射擊員歷史命中率為0.39,在一次比賽中,他射中了,可以說(shuō)他的命中率是百分之百嗎?當(dāng)然不能,因?yàn)閿?shù)據(jù)太少,所以需要用到先驗(yàn)概率。在該射擊員沒(méi)有比賽之前我們就有了他的命中率范圍。
貝塔分布的數(shù)學(xué)期望為:\alpha/(\alpha+\beta)

參數(shù):
\alpha
\beta
用途:從貝塔分布中隨機(jī)返回一個(gè)值,范圍在0到1之間

  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
  1. 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
    '''
  1. expovariate
    參數(shù):\lambda float類(lèi)型
    用途:返回指數(shù)分布的隨機(jī)浮點(diǎn)數(shù)
  2. gauss
    參數(shù):
    \mu
    \sigma
    用途:返回高斯分布的隨機(jī)浮點(diǎn)數(shù)
  3. gammavariate
    參數(shù):
    alpha:\alpha
    beta:\beta
    用途:返回gamma分布的隨機(jī)浮點(diǎn)數(shù)
  4. getstate
    參數(shù):
    用途:
    例子:

  1. 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}
  1. lognormvariate
    參數(shù):
    \mu
    \sigma
    用途: 返回對(duì)數(shù)正態(tài)分布的隨機(jī)浮點(diǎn)數(shù)
  2. normalvariate
    參數(shù):
    \mu
    \sigma
    用途: 返回正態(tài)分布的隨機(jī)浮點(diǎn)數(shù)
  3. paretovariate
    參數(shù): \alpha
    用途: 返回帕累托分布的隨機(jī)浮點(diǎn)數(shù)
  4. 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è)值
  1. random
    參數(shù):無(wú)
    用途:隨機(jī)生成一個(gè)[0,1]的浮點(diǎn)數(shù)

  2. 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}
  1. 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ì)變
'''
  1. 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è)元素

  1. 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]
  1. setstate
    參數(shù):
    用途:
    例子:

  1. 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次
    '''
  1. uniform
    參數(shù):
    a:float
    b:float
    用途:返回a,b之間的隨機(jī)一個(gè)浮點(diǎn)數(shù),這里的a可以小于b
  2. vonmisesvariate
    參數(shù):
    \mu
    \kappa
    用途: 返回具有von Mises分布或圓形正態(tài)分布的隨機(jī)浮點(diǎn)數(shù)。
  3. weibullvariate
    參數(shù):
    \alpha
    \beta
    用途: 返回Weibull分布的隨機(jī)浮點(diǎn)數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • random是Python中的一個(gè)內(nèi)置模塊,用于生成隨機(jī)數(shù)。 seed()方法 seed()方法用于初始化隨機(jī)數(shù)生...
    暖A暖閱讀 456評(píng)論 0 4
  • 如果你對(duì)在Python生成隨機(jī)數(shù)與random模塊中最常用的幾個(gè)函數(shù)的關(guān)系與不懂之處,下面的文章就是對(duì)Python...
    Hobort閱讀 1,586評(píng)論 0 1
  • 我們可以先來(lái)了解下偽隨機(jī)數(shù)和真隨機(jī)數(shù)的概念。 偽隨機(jī)數(shù):偽隨機(jī)數(shù)是用確定性的算法計(jì)算出來(lái)自[0,1]均勻分布的隨機(jī)...
    a479a910abe7閱讀 2,618評(píng)論 0 0
  • 源碼:Lib/random.py 該模塊實(shí)現(xiàn)了各種分布的偽隨機(jī)數(shù)生成器。 對(duì)于整數(shù),從范圍中有統(tǒng)一的選擇。 對(duì)于序...
    山海皆可平z閱讀 543評(píng)論 0 1
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 7,968評(píng)論 0 4

友情鏈接更多精彩內(nèi)容