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
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With