python - 索引类概率的动态向量
问题描述
对于我的代码,我有一个大的(最多 40,000 个)类概率向量。这组类概率也需要定期重新加权,因此假设它会在每次调用代码时发生变化。向量总和为 1。我需要有效地搜索与该概率对应的索引。
举个例子 - 假设向量是[0.25, 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
第 -th 索引。 - 第 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
推荐阅读
- flutter - 如何定义函数的动态参数
- autocomplete - 谷歌表格中的自动填充词
- c++ - 要从 Delphi 调用的 C++ dll 函数 - 数组参数
- intellij-idea - Intellij 的想法。javax.net.ssl.SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适)
- php - 网页被封锁!从数据发送 POST 中的 URL 时
- awk - 不要在 awk 中转义变量
- node.js - 如何停止接收有关主题的 kafka-metadata 消息
- android - 数据绑定:如何在一个视图中绑定不同的数据变量
- excel - 数据透视表 Excel 到 Google 表格在列上添加计算值
- xaml - UWP 社区工具包 DataGrid:无法声明列