按概率隨機選取


上一篇筆記的pygame游戲對敵人和白雲的移動速度使用了隨機函數randint(),游戲體驗不是太好。如果是按概率隨機選取設置速度的話,游戲體驗會好一些。

據我了解,random.choice(seq)是等概率選取一個,不是我想要的。而 numpy.random.choice(seq, p, k)是按概率隨機重復選取多個,這正是我想要的。

但是,我不想為這么一個函數引入巨大的numpy庫,所以打算自己實現一個按概率隨機選取的函數。

特此將代碼記錄如下:


# 作者:hhh5460
# 時間:2017年6月17日

import random

# 根據概率隨機選取
def random_choice(seq, prob, k=1):
    '''
    功能:
        按給定概率prob,從seq中選取元素。可重復k次
    注意
        1. seq, prob長度要相等
        2. prob的概率和要等於1
        3. k 表示重復選取的次數,默認為1次
        4. 結果返回list
        5. 用到了random模塊的random()函數
    例子:
        >>> random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35])
        ['d']
        >>> random_choice('abcd', [0.4, 0.15, 0.1, 0.35], k=5)
        ['d','d','b','a','d']
    '''
    res = []
    for j in range(k):
        p = random.random()
        for i in range(len(seq)):
            if sum(prob[:i]) < p <= sum(prob[:i+1]):
                res.append(seq[i])
    return res
    
# 測試
def test():
    print(random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35], k=5))

test()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM