我正在尝试计算正在变化的值的平均值,我想这样做而不将所有先前的值存储在数组中并迭代它们。
我找到了这个公式
avg = avg + (value - avg) / n
其中n是value
的更改次数。
TL; DR
我的问题是这个公式是否与正常方式相同 计算平均值(当我比较它们时似乎是),或者 如果在某些情况下可能给出不同的结果?
我不确定这个公式的正确名称是什么 - 我看过“平均值”,滚动平均值“,”移动平均值“等等。它的结果似乎与存储每个的结果完全相同历史value
,将它们相加并除以n
- 即“正常平均值”。
令人困惑的是,人们有时会将此公式称为“移动平均线”,在我看来,这听起来更像是在使用历史值的子集来计算平均值。其他人说这是exponential moving average (see comment by Julia on OP)。
答案 0 :(得分:2)
此公式是否与计算平均值的常规方法相同?
如果avg在开始时设置为等于0,则该公式确实计算前n个样本的总和。
当n = 1时显然是正确的,因为1个样本的平均值为:
avg' = avg + (value - avg) / n
= 0 + (value - 0) / 1
= value
对于较大的值,假设n-1为真(即avg =(x [1] + .. + x [n-1])/(n-1))。
然后:
avg' = avg + (x[n] - avg) / n
= (n-1)*avg/n + x[n]/n
= (x[1]+...+x[n-1])/n + x[n]/n
= (x[1]+...+x[n])/n
因此,avg的新值也等于前n个样本的平均值。
这是移动平均线吗?
通常按"移动平均线"人们指的是simple moving average。
此公式实际上称为cumulative moving average。