2015-04-03 5 views
2

Предположим, что я хочу создать образец из N элементов, выбранных из [1,2,3], так что 1, 2 и 3 будут представлены весами 0,4, 0,4 и 0,2 соответственно. Как бы я это сделал.python: случайный образец с вероятностями

Я знаю, как сделать это в R без использования циклов:

mySample <- sample(c(1,2,3),size = 100,replace=T,prob = c(.4,.4,.2)) 
+0

http://stackoverflow.com/a/3679747/489590 –

ответ

3

Вы можете сгенерировать случайное число в [0,1), то, если он находится в [0, 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; 
Смежные вопросы