生成具有給定(數(shù)字)分布的隨機數(shù)我有一個文件,其中包含一些不同值的概率,例如:1 0.12 0.053 0.054 0.25 0.46 0.2我想用這個發(fā)行版生成隨機數(shù)。是否存在處理此問題的現(xiàn)有模塊?自己編寫代碼相當(dāng)簡單(構(gòu)建累積密度函數(shù),生成隨機值[0,1]并選擇相應(yīng)的值)但似乎這應(yīng)該是一個常見問題,可能有人創(chuàng)建了一個函數(shù)/模塊它。我需要這個,因為我想生成一個生日列表(不遵循標(biāo)準(zhǔn)random模塊中的任何分發(fā))。
3 回答

墨色風(fēng)雨
TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊
從Python 3.6開始,Python的標(biāo)準(zhǔn)庫就有了解決方案,即random.choices
。
用法示例:讓我們設(shè)置一個與OP問題匹配的總體和權(quán)重:
>>> from random import choices>>> population = [1, 2, 3, 4, 5, 6]>>> weights = [0.1, 0.05, 0.05, 0.2, 0.4, 0.2]
現(xiàn)在choices(population, weights)
生成一個樣本:
>>> choices(population, weights)4
可選的僅關(guān)鍵字參數(shù)k
允許一次請求多個樣本。這很有價值,因為random.choices
在生成任何樣本之前,每次調(diào)用時都需要做一些準(zhǔn)備工作; 通過一次生成許多樣本,我們只需要做一次準(zhǔn)備工作。在這里,我們生成了一百萬個樣本,并用于collections.Counter
檢查我們得到的分布大致與我們給出的權(quán)重相匹配。
>>> million_samples = choices(population, weights, k=10**6)>>> from collections import Counter>>> Counter(million_samples)Counter({5: 399616, 6: 200387, 4: 200117, 1: 99636, 3: 50219, 2: 50025})
添加回答
舉報
0/150
提交
取消