【问题标题】:Randomly select list from list of lists in python depending on weights根据权重从python列表中随机选择列表
【发布时间】:2017-02-19 18:12:27
【问题描述】:

我有一个列表列表,其中每个列表都与一个分数/权重相关联。我想通过从第一个列表中随机选择来生成一个新的列表列表,以便那些得分较高的列表出现得更频繁。当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

标签: python list numpy random


【解决方案1】:

不要传递实际的列表,而是将带有索引的列表传递到列表中。

np.random.choice 已经允许这个,如果你传递一个 int 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 使用 range(len(population))
  • 这实际上就像一个魅力,只要你做choice = [population[i] for i in choice_index],而不是choice = population[choice_index],因为choice_indexlist
  • @SardorbekImomaliev 仍然是同样的错误。它来自choice = population[choice_index]
  • @roganjosh:抱歉,我没有注意到你得到了 10 个值,假设为 1。将编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2012-02-21
  • 2017-03-26
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多