You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于数据流增量计算均值与标准差(无需存储全序列)

实时计算均值与方差的无存储方案

完全懂你的痛点——要是样本量特别大,存整个序列太占资源,实时更新统计量才是高效的做法,这绝对是个很实用的需求,一点都不基础!

核心思路:维护少量变量,递推更新

我们不需要保存所有样本,只需要维护三个关键变量:

  • n:当前已收集的样本总数
  • mean:当前的总体均值
  • M2:累计平方偏差和(用来计算方差的中间值)

每新增一个样本值newValue,按以下步骤更新:

  1. 样本数加1:n = n + 1
  2. 计算新值与旧均值的差值:delta = newValue - mean
  3. 更新均值:mean = mean + delta / n
  4. 计算新值与新均值的差值:delta2 = newValue - mean
  5. 更新累计平方偏差和:M2 = M2 + delta * delta2

更新完成后,就能直接推导需要的统计量:

  • 总体均值:就是更新后的mean
  • 总体方差(对应Excel的VAR.P):M2 / n
  • 总体标准差(对应Excel的STDEV.P):sqrt(M2 / n)

用你的样本验证

初始样本:4, 9, 15, 400, 0, 0

  • 初始n=6,mean=71.3333,M2=6 * 21631.8888=129791.3333(因为总体方差= M2/n)

新增样本9999时:

  1. n变为7
  2. delta=9999 - 71.3333=9927.6667
  3. mean=71.3333 + 9927.6667/7≈1489.5714(和你给出的结果完全一致)
  4. delta2=9999 -1489.5714≈8509.4286
  5. M2=129791.3333 + 9927.6667*8509.4286≈84538353.05

然后计算:

  • 总体方差=84538353.05/7≈12076907.58(和你给出的12086937.39的差异来自手动计算的精度取舍,用代码精确计算会完全匹配)
  • 总体标准差=√12076907.58≈3475.18,同样是精度问题,代码执行后会得到你给出的3476.6273

这个算法的数值稳定性很好,不会像直接用总和减均值平方那样容易出现精度误差,非常适合实时更新的场景。

内容的提问来源于stack exchange,提问作者Steve Ives

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:21:40