select 按值加权的行索引

select a row index weighted by value

权重字典:{1:0.1, 2:0.9}(值为1的项目被选中的概率为10%,值为2的概率为90%)

示例值行:[0, 0, 1, 0, 2, 1](字典中仅包含 0 和值)

输出应该是一个随机选择的索引

对于示例行,为行中的每个项目选择索引的概率应为 [0, 0, 0.05, 0, 0.9, 0.05](请注意,由于该行包含两个不同的 1 元素,因此每个元素应该有 0.05 的概率被选中,因为重量计入具有该值被选中的项目)

你可以在这里使用np.select

wt = {1:0.1, 2:0.9}
a = np.array([0, 0, 1, 0, 2, 1])
choicelist = [a==i for i in wt.keys()]
condlist = [v/np.count_nonzero(a==k) for k,v in wt.items()]
np.select(choicelist, condlist)
# array([0.  , 0.  , 0.05, 0.  , 0.9 , 0.05])