隨機選擇的加權(quán)版本我需要編寫隨機選擇的加權(quán)版本(列表中的每個元素被選中的概率不同)。這就是我想出來的: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這個功能對我來說太復(fù)雜了,太丑了。我希望在座的每一個人都能提出一些改進的建議,或者其他的方法。對我來說,效率并不像代碼的整潔和可讀性那么重要。
3 回答

DIEA
TA貢獻1820條經(jīng)驗 獲得超2個贊
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

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超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"
添加回答
舉報
0/150
提交
取消