Питон: случайная выборка с вероятностями

Предположим, я хочу создать выборку из 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;
Другие вопросы по тегам