1
使用Boost的累加器,我可以轻松计算出 加权或未加权输入集的统计量。我想知道是否可以在同一个累加器内混合加权 和未加权的数量。看看 docs它似乎并不是这样。使用相同的boost :: accumulator_set计算加权和未加权统计量?
编译没有问题,但产生的另一个结果不是我所希望的:
using namespace boost::accumulators;
const double a[] = {1, 1, 1, 1, 1, 2, 2, 2, 2};
const double w[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
accumulator_set<double, features<tag::sum, tag::weighted_sum>, double> stats;
for (size_t i=0; i<9; ++i)
stats(a[i], weight = w[i]);
std::cout << sum(stats) <<" "<< weighted_sum(stats) << std::endl;
// outputs "75 75" instead of "13 75"
而且,与第三模板参数accumulator_set
我似乎总是 获得加权量,用“加权”功能,即使和提取:
accumulator_set<double, features<tag::sum>, double> stats;
for (size_t i=0; i<9; ++i)
stats(a[i], weight = w[i]);
std::cout << sum(stats) << std::endl;
// outputs "75" instead of 13
我每次必须使用两个不同的蓄电池,如果我想计算两个 加权和不加权量?
编辑 我只是用sum
作为一个例子,在现实中我感兴趣的多,更复杂的数量。
谢谢!是的,这对'sum'的情况是有效的。我没有说清楚这仅仅是一个例子,当我真正有兴趣提取其他更复杂的数量时(例如方差,中值和均值以及它们的加权对应数)。总而言之,一开始可能不会使用累加器。 – 2010-06-23 06:02:07
我接受这个答案,因为它指出了文档中的明显的一点。我仍然不知道是否有一些令人讨厌的模板技巧来做我想做的事情,但从文档看来,这似乎需要一个肮脏的黑客,而不是'accumulator_set'直接支持的东西。 – 2010-06-24 00:28:48