【发布时间】:2014-08-16 15:39:17
【问题描述】:
最好举个例子。
假设向量 A 包含:
A = {3 ,2 ,1 ,4 ,6 ,3 ,8 ,4}
向量 B 包括:
B = {1.5,2 ,2 ,1.5,3 ,3 ,3 ,2}
向量B中的唯一值是{1.5, 2, 3}
我希望得到的向量 RESULT 是:
RESULT[0] = Average(A given B=1.5) = Average(3,4)
RESULT[1] = Average(A given B=2 ) = Average(2,1,4)
RESULT[2] = Average(A given B=3 ) = Average(6,3,8)
计算这个最有效的方法是什么。我自己的方法是遍历 B 的唯一元素,并且对于它们中的每一个,遍历每个 B 值以尝试匹配该唯一数字,并在每次匹配中不断总结向量 A 的相应元素,同时计算匹配的数量,所以我可以找到平均值。
这太慢了。因为我的向量 A 是 8M 个元素,而向量 B 由 0.5M 个唯一值组成。
任何帮助将不胜感激。
【问题讨论】:
-
同步对两个向量进行排序,然后迭代
B的相等范围? -
这看起来很有希望,我现在试试看能提高多少速度。
-
不过,依赖浮点值的精确相等是一种味道。
-
具有浮点数的唯一值听起来很奇怪。请注意,例如
.1+.2!=.3和doubles。
标签: c++ vector conditional average