相关疑难解决方法(0)

如何计算移动平均线而不保留计数和数据总数?

我试图找到一种计算移动累积平均值的方法,而不存储到目前为止收到的计数和总数据.

我想出了两个算法,但都需要存储计数:

  • 新的平均值=((旧计数*旧数据)+下一个数据)/下一个计数
  • 新平均值=旧平均值+(下一个数据 - 旧平均值)​​/下一个计数

这些方法的问题在于计数越来越大,导致平均值的精度下降.

第一种方法使用旧计数和下一计数,显然是1.这让我想到也许有一种方法可以删除计数,但遗憾的是我还没有找到它.它确实让我更进一步,导致第二种方法,但仍然计数存在.

是可能的,还是我只是在寻找不可能的事情?

moving-average

105
推荐指数
7
解决办法
11万
查看次数

使用boost :: accumulators,如何重置滚动窗口大小,是否保留了额外的历史记录?

我正在看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,那么累加器是否具有额外的内部状态,或者我是否必须等待额外的值?

c++ boost

10
推荐指数
1
解决办法
8049
查看次数

标签 统计

boost ×1

c++ ×1

moving-average ×1