如何解决索引类概率的动态向量
对于我的代码,我有一个大的(最多 40,000 个)类别概率向量。这组类概率也需要定期重新加权,因此假设它会在每次调用代码时发生变化。向量总和为 1。我需要有效地搜索与该概率对应的索引。
举个例子 - 假设向量是 [0.25,0.25,0.25]
,跨 4 个对象的均匀概率。我的概率结果是 0.67。这对应于索引 3,因为 0.67 > sum(probvec[0:1])
但 0.67 <= sum(probvec[0:2])
。
我愿意更改概率向量以使其成为运行总和,即 [0.25,0.5,0.75,1]
,不过我还需要有关如何执行更新的建议。
任何帮助将不胜感激。
解决方法
-
第 1 步:预先计算第
i
个索引的所有部分总和。 -
第 2 步:使用二进制搜索扫描您的
sums_probvec
以获取 logtime 中的结果。
import numpy as np
probvec = np.full(4,0.25)
prob = 0.67
# pre-compute all the partial sums up to the i-th index
sum_probvec = [probvec[0]]
for i in range(1,len(probvec)) :
sum_probvec.append(sum_probvec[i-1] + probvec[i])
# use binary search for logtime results
i = 0
j = len(sum_probvec)
while i != j-1:
mid = (i + j) // 2
if prob > sum_probvec[mid]:
i = mid
else:
j = mid
index = i+2
print (index) # 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。