假设我们有一组 x
的 N
值 {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/