Python:根据概率进行随机采样

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

https://dev59.com/9XA65IYBdhLWcg3wsg2B#3679747 - Brian Cain
1个回答

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接