#python #python-3.x #random
#python #python-3.x #Случайный
Вопрос:
Я смущен использованием нового random.choices
в Python 3.6.
Вот документ:
random.choices(population, weights=None, *, cum_weights=None, k=1)
— Возвращает список элементов размером k, выбранных из совокупности, с заменой. Если совокупность пуста, повышается
IndexError
.
Они приводят пример: weights=[10, 5, 30, 5]
и я не знаю, что это значит. Почему они не суммируются до 100? Если мое население [1, 2, 3, 4]
— означает ли это, что выбор ’10’ происходит с вероятностью 0.1?
Комментарии:
1. Они не суммируются до 100, потому что это относительные веса, а не проценты. Если в совокупность не входит 10, вероятность того, что это произойдет, равна нулю. В вашем примере вероятность, например,
1
равна10 / (10 5 30 5)
, или 0,2.2. Ага. Это проясняет ситуацию! Спасибо
Ответ №1:
Общий вес равен 10 5 30 5=50.
Предположим, что совокупность равна [1,2,3,4].
Он возвращает 1 с вероятностью 10/50 = 0,2
Он возвращает 2 с вероятностью 5/50 = 0.1
Он возвращает 3 с вероятностью 30/50 = 0,6
Он возвращает 4 с вероятностью 5/50 = 0,1
Комментарии:
1. Спасибо! Это имеет смысл для относительных весов. Но как насчет совокупных весов? Каким образом веса [10, 5, 30, 5] эквивалентны совокупным весам [10, 15, 45, 50]?
2. совокупные веса — это просто сумма префиксов веса по определению.