python - 用于选择具有某些相关概率的 N 个值的代码

标签 python algorithm probability probability-theory

假设我们有一组 xN{x_i; i=1,...,N} 和一组相关概率 {w_i; i=1,...,N}

我们想从集合x中得到N值的新集合x^ {x^_i; i=1,...,N} 根据概率w_i 从集合x 中选择每个值x_i。我们如何编码(即伪代码算法,可以翻译成任何语言)。

编辑: python 代码:

def resample(self,x,w):
    N = len(w)
    new_x = empty(N)
    c = cumsum(w)

    for i in range(N):
        r = random()
        for j in range(N):
            if( j == N-1 ):
                new_x[i] = x[j]
                break
            else:
                if( (c[j] <= r) and (r < c[j+1]) ):
                    new_x[i] = x[j+1]
                    break

    new_w = ones(N,dtype=float)/N
    return new_x, new_w

最佳答案

您可以调用一个函数,它会为您提供一个介于 0 和 1 之间的随机数。
如果概率是w_1 = 0.2, w_2 = 0.5, w_3 = 0.3,你可以:
如果你得到一个介于 0 和 0.2 之间的数字,请选择 x_1
如果你得到一个介于 0.2 和 0.7 之间的数字,请选择 x_2
否则选择 x_3。

更一般地,如果 w_1 + ... + w_(n-1) <= 随机数 < w_1 + ... + w_(n-1) + w_n 则选择 x_n

这不是完整的伪代码,只是对其最有问题的部分的解释,但我认为如果您对问题有基本的了解就足够了。

关于python - 用于选择具有某些相关概率的 N 个值的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10998002/

相关文章:

python - 是否可以在 Python 中重用导入代码?

ruby - 在ruby中随机选择属性值

algorithm - 根据 N 重写 O(N W)

probability - 如何实现非均匀概率分布?

python - 如何将值是列表的系列的值折叠成唯一列表

python - "ImportError: DLL load failed: The specified module could not be found"进行对象检测时出现此错误

python - f2py:公开 "used"模块的参数

c++ - 按位运算符从 32 位获取字节

Python:计算一个点符合曲线的概率

r - 给定数字和 n 组,如何将数字随机分成多个数字?