#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. Будет редактировать.