权重字典:{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])
关于python - 选择按值加权的行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65629540/