python:具有概率的随机样本

时间:2015-04-03 04:35:58

标签: python random probability sample weighted

假设我想创建一个从[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))

1 个答案:

答案 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;