Случайный выбор списка из списка списков в python в зависимости от весов

#python #list #numpy #random

#python #Список #numpy #Случайный

Вопрос:

У меня есть список списков, где каждый список связан с оценкой / весом. Я хочу создать новый список списков путем случайного выбора из первого, чтобы те, у кого более высокие оценки, появлялись чаще. Строка ниже отлично работает, когда 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

Комментарии:

1. @Chicony вы должны упомянуть в вопросе, что это не обязательно должно быть numpy

Ответ №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]
  

Комментарии:

1. TypeError: only integer arrays with one element can be converted to an index

2. @roganjosh использовать range(len(population))

3. На самом деле это будет работать как шарм, только если вы это сделаете choice = [population[i] for i in choice_index] , а choice = population[choice_index] не как choice_index list

4. @SardorbekImomaliev все та же ошибка. Он поступает из строки choice = population[choice_index]

5. @roganjosh: извините, я не заметил, что вы получаете 10 значений, предполагается, что 1. Будет редактировать.