java中计算特定最后n个持续时间移动平均值的公式
我遇到了一个用例,在这个用例中,我应该计算一个特定持续时间的移动平均值,比如说最近n天的移动平均值。我知道,如果我存储所有过去的数据,我可以减去前几天的贡献,那么这可以很容易地实现。但我如何有效地计算它,只存储前几天的平均值,而不存储前几天的数据
下面是我想要完成的
例如,我有5天的数据,比如2,8,5,2,5,其平均值为4.4
现在,如果第八天的数据为10,则应计算运行平均值,忽略前3个元素2、8和5,因此平均值为3.2
目前,我采用的方法是确定一天的平均贡献,然后用我认为不准确的总平均值减去它
Formula = (avg for past n days) + (today's count/n) -
-(no_of_days from the last computed day * (avg for past n days)/n)
那么,有人能为我推荐一个有效的实现/计算公式吗
# 1 楼答案
你不能。一个简单的滚动平均线或移动平均线要求你记住区间内的所有值。没有(有用的)1公式允许您以其他方式进行操作
然而,这并不是结束。还有其他滚动平均值度量,不需要存储所有值;e、 g.“加权移动平均线”、“累积移动平均线”、“指数移动平均线”等。关于Moving Averages的维基百科提供了一个很好的概述,描述了各种度量的属性并提供了公式
我建议你读一下这一页,然后做出选择。在Java中实现任何一个滚动平均度量都应该是一项简单的编程任务
1-你可以发明一个无用的。。。这依赖于存储从原始值派生的N个其他值。但我不认为这会有帮助
# 2 楼答案
你所要求的是不可能的,你已经扔掉了数据,因此无法神奇地将其取回
您只需执行以下操作即可计算移动平均线:
这在很大程度上加重了它对今天的影响,尽管你可能想要的是一个比率,即从今天得到多少,从目前的平均水平得到多少。例如,如果你想要一个10天移动平均线,那么它的起点是0.1
实际上,您应该保留数据,或者查找正确的算法,以准确地获得所需的数据