Использование boost:: аккумуляторов, как я могу reset увеличить размер окна, сохранить дополнительную историю?

Я рассматриваю структуру boost:: accumulator, в частности пару вычислений roll_window.

#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/rolling_mean.hpp>
accumulator_set<int, stats<tag::rolling_mean> > acc(tag::rolling_window::window_size = 3);

Как вы видите здесь, я установил window_size как три, так что он поддерживает среднее значение только для трех последних образцов.

Могу ли я изменить этот размер во время выполнения, возможно, на основе пользовательской настройки?

Если да, и я увеличиваю window_size, у аккумулятора есть дополнительное внутреннее состояние, если он уже видел больше, чем мой новый window_size, или мне придется ждать дополнительных значений?

Ответ 1

Лучший способ reset аккумулятора ускорения - назначить его новому. Например:

typedef accumulator_set<int, ... template crazyness tags ... > window_acc;

window_acc acc;
acc(1);
acc(2);
...
// reset
acc = window_acc();

Собственно, swap будет предпочтительнее здесь, но у аккумулятора нет набора swap =\