亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

隨機選擇的加權版本

隨機選擇的加權版本

達令說 2019-06-09 14:12:34
隨機選擇的加權版本我需要編寫隨機選擇的加權版本(列表中的每個元素被選中的概率不同)。這就是我想出來的:def weightedChoice(choices):     """Like random.choice, but each element can have a different chance of     being selected.     choices can be any iterable containing iterables with two items each.     Technically, they can have more than two items, the rest will just be     ignored.  The first item is the thing being chosen, the second item is     its weight.  The weights can be any numeric values, what matters is the     relative differences between them.     """     space = {}     current = 0     for choice, weight in choices:         if weight > 0:             space[current] = choice             current += weight     rand = random.uniform(0, current)     for key in sorted(space.keys() + [current]):         if rand < key:             return choice         choice = space[key]     return None這個功能對我來說太復雜了,太丑了。我希望在座的每一個人都能提出一些改進的建議,或者其他的方法。對我來說,效率并不像代碼的整潔和可讀性那么重要。
查看完整描述

3 回答

?
DIEA

TA貢獻1820條經驗 獲得超3個贊

從1.7.0版本開始,NumPy有一個choice支持概率分布的函數。

from numpy.random import choice
draw = choice(list_of_candidates, number_of_items_to_pick,
              p=probability_distribution)

請注意probability_distribution是按同一順序排列的序列。list_of_candidates..您也可以使用關鍵字replace=False若要更改行為,使繪制的項不被替換,請執行以下操作。


查看完整回答
反對 回復 2019-06-09
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

def weighted_choice(choices):
   total = sum(w for c, w in choices)
   r = random.uniform(0, total)
   upto = 0
   for c, w in choices:
      if upto + w >= r:
         return c
      upto += w   assert False, "Shouldn't get here"


查看完整回答
反對 回復 2019-06-09
  • 3 回答
  • 0 關注
  • 617 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號