我正在寻找最有效的方法来随机绘制n
列表中的元素,给定一个概率列表,说明每个元素被选择的概率。
aList = [3,4,2,1,4,3,5,7,6,4]
MyProba = [0.1,0.1,0.2,0,0.1,0,0.2,0,0.2,0.1]
这意味着在每次抽奖时,第一个元素(即 3)被抽出的概率为 0.1。当然,
sum(MyProba) == 1 # 总是返回 True len(aList) == len(MyProba) # 总是返回 True
到目前为止,我做了以下事情:
def random_pick(some_list, proba):
x = random.uniform(0, 1)
cumulative_proba = 0.0
for item, item_proba in zip(some_list, proba):
cumulative_proba += item_proba
if x < cumulative_proba:
break
return item
nb_draws = 10
list_of_drawn_elements = []
for one_draw in range(nb_draws):
list_of_drawn_elements.append(random_pick(aList, MyProba))
它可以工作,但是对于长列表和nb_draws
. 我怎样才能提高这个过程的速度?
注意:在我面临的特殊情况下,nb_draws 总是等于aList
.