Питон: случайная выборка с вероятностями
Предположим, я хочу создать выборку из N элементов, выбранных из [1,2,3], так что 1, 2 и 3 будут представлены с весами 0,4,0,4 и 0,2 соответственно. Как бы я это сделал?
Я знаю, как сделать это в R без использования циклов:
mySample <- sample(c(1,2,3),size = 100,replace=T,prob = c(.4,.4,.2))
1 ответ
Решение
Вы можете сгенерировать случайное число в [0,1), затем, если оно в [0,.4), выбрать "1", иначе, если оно в [.4,.8), выбрать "2", а в противном случае выбрать "3"., код:
from random import random;
N = 10;
elements = [1,2,3];
weights = [.4, .4 , .2];
samples = range(N);
r = 0;
temp = 0;
for i in range(10):
r = random();
temp = 0;
for j in range(len(elements)):
temp += weights[j];
if(temp>r):
samples[i] = elements[j];
break;