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])
权重字典:{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])