在Python中根据权重从列表的列表中随机选择一个列表

7

我有一个列表,其中每个列表都与得分/权重相关联。我想通过从第一个列表中随机选择来生成新的列表,以便那些得分更高的列表出现得更频繁。当population只是一个普通列表时,下面的代码可以正常工作。但我想把它用于一个列表的列表。

population = [['a','b'],['b','a'],['c','b']]
list_of_prob = [0.2, 0.2, 0.6]

population = np.random.choice(population, 10, replace=True, p=list_of_prob)

这将会输出错误信息:ValueError: a must be 1-dimensional

@Chicony 你应该在问题中提到不一定需要使用 numpy - vishes_shell
1个回答

10

不要传递实际列表,而是传递一个索引列表。

np.random.choice 已经允许这样做,如果传递一个整数n,则它的作用就像你传递了np.arange(n)

所以

choice_indices = np.random.choice(len(population), 10, replace=True, p=list_of_prob)
choices = [population[i] for i in choice_indices]

TypeError: only integer arrays with one element can be converted to an index - roganjosh
@roganjosh 使用 range(len(population)) - Sardorbek Imomaliev
2
这将非常有效,只要您执行choice = [population[i] for i in choice_index],而不是像选择索引choice_index作为list那样choice = population[choice_index] - lycuid
@SardorbekImomaliev 仍然是同样的错误。它来自于 choice = population[choice_index] 这一行。 - roganjosh
@roganjosh:抱歉,我没有注意到你要获取10个值,以为只有1个。我会进行修改。 - RemcoGerlich
现在已经修复了 :) - roganjosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接