python:具有概率的随机样本

python: random sample with probabilities

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