Python 加權(quán)隨機(jī)

稀有度隨機(jī)

問題1. 有一堆數(shù)據(jù) x = [1,5,7],隨機(jī)取出一個數(shù)?

random.choice(x)

問題2. 如何按照權(quán)重20 , 20 , 60取出一個數(shù)?

我們可以把總和 100分成幾個區(qū)間,0 - 19 分給 1, 20 - 39 分給 5, 40 - 99 分給7, 再隨機(jī)0 - 99 看這個隨機(jī)數(shù)落在哪個區(qū)間就可以了。

import random
import bisect

m = [20, 20, 60]
n = []
count = 0 

for i, v in enumerate(m):
    n.append(count)
    count += v

rd = random.randint(0, count -1)
r = bisect.bisect_right(n, rd)
result = x[r]

注意:m必須是排好順序的,bisect二分查找binary search需要 bisect.bisect_right(n, rd) 插入的 rd 在 n 的位置。

其中 n 的值可以使用

from itertools import accumulate  
n = list(accumulate(data))

使用 Python 寫算法的時候,注意多找找相關(guān)的第三方包,總有驚喜等著你。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 本方法的原理是把所有權(quán)重的數(shù)值相加得到一個權(quán)重的總和,然后在 1 到總和之間隨機(jī)選取一個整數(shù)。把權(quán)重由小到大按升序...
    SingleDiego閱讀 2,669評論 0 0
  • 個人學(xué)習(xí)批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,975評論 0 11
  • 一、實驗?zāi)康?學(xué)習(xí)使用 weka 中的常用分類器,完成數(shù)據(jù)分類任務(wù)。 二、實驗內(nèi)容 了解 weka 中 explo...
    yigoh閱讀 8,834評論 5 4
  • 近段時間,看了些書,認(rèn)識些人,漸漸的更加熟悉了王小波、路遙、巴金,認(rèn)識了周國平、倉央嘉措、徐志摩等。而這些使我...
    lanabobana閱讀 288評論 0 0
  • 執(zhí)手青梅醉芳華, 俯耳嫣然憶猶佳。 而今墳前不再語, 筆下生花渡袈裟。 2016.12.28 Becky
    舞鎏殤閱讀 124評論 0 0

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