совокупные веса в random.choices

#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. совокупные веса — это просто сумма префиксов веса по определению.