我需要获得一个k-sized从总体中进行无替换的样本,其中总体中的每个成员都有相关的权重(W)。
Numpy's 随机选择如果没有更换,则不会执行此任务,并且随机抽样不会采用加权输入。
目前,这就是我正在使用的:
P = np.zeros((1,Parent_number))
n=0
while n < Parent_number:
draw = random.choices(population,weights=W,k=1)
if draw not in P:
P[0,n] = draw[0]
n=n+1
P=np.asarray(sorted(P[0]))
虽然这可行,但它需要在数组、列表和返回数组之间来回切换,因此不太理想。
我正在寻找最简单且最容易理解的解决方案,因为此代码将与其他人共享。
您可以使用np.random.choice
with replace=False
如下:
np.random.choice(vec,size,replace=False, p=P)
where vec
是你的人口和P
是权重向量。
例如:
import numpy as np
vec=[1,2,3]
P=[0.5,0.2,0.3]
np.random.choice(vec,size=2,replace=False, p=P)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)