假设我想创建一个从[1,2,3]中选择的N个元素的样本,这样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))
答案 0 :(得分: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;