С помощью аккумуляторов Boost я могу легко рассчитать статистические величины для взвешенных или невзвешенных входных наборов.Интересно, можно ли смешивать взвешенные и невзвешенные количества в одном и том же аккумуляторе?Глядя на документы , это не выглядит так.
Это прекрасно компилируется, но дает другой результат, чем мне бы хотелось:
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
в качестве примера, на самом деле меня интересуют несколько более сложных величин.