2015-04-03 76 views
2

假設我想創建一個從[1,2,3]中選擇的N個元素樣本,使得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 – 2015-04-03 04:40:43

回答

3

您可以生成[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;