我试图找到一种计算移动累积平均值的方法,而不存储到目前为止收到的计数和总数据.
我想出了两个算法,但都需要存储计数:
这些方法的问题在于计数越来越大,导致平均值的精度下降.
第一种方法使用旧计数和下一计数,显然是1.这让我想到也许有一种方法可以删除计数,但遗憾的是我还没有找到它.它确实让我更进一步,导致第二种方法,但仍然计数存在.
是可能的,还是我只是在寻找不可能的事情?
我正在看boost :: accumulator框架,特别是一些rolling_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);
Run Code Online (Sandbox Code Playgroud)
如您所见,我已将window_size设置为3,这样它只保留最后三个样本的平均值.
我可以在运行时修改该大小,可能是基于用户设置吗?
如果是这样,并且我增加window_size,如果累加器已经看到超过我的新window_size,那么累加器是否具有额外的内部状态,或者我是否必须等待额外的值?