6

I have a list of lists, where each list is associated with a score/weight. I want to produce a new list of lists by randomly selecting from the first one so that those with higher scores will appear more often. The line below works fine when population is just a normal list. But I want to have it for a list of lists.

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)

This will give the output ValueError: a must be 1-dimensional

vishes_shell
  • 22,409
  • 6
  • 71
  • 81
Chicony
  • 393
  • 3
  • 17

1 Answers1

9

Instead of passing the actual list, pass a list with indexes into the list.

np.random.choice already allows this, if you pass an int n then it works as if you passed np.arange(n).

So

choice_indices = np.random.choice(len(population), 10, replace=True, p=list_of_prob)
choices = [population[i] for i in choice_indices]
RemcoGerlich
  • 30,470
  • 6
  • 61
  • 79