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

如何使用np.cumsum实现滑动均值计算及两种实现的等价性验证

逻辑验证结论

两段代码的单窗口计算逻辑完全一致,仅输出长度和覆盖范围存在差异:

  • 原循环版本仅计算中心对齐的滑动窗口,输出长度为 len(ar) - window,比cumsum版本少1个元素
  • cumsum版本会计算所有完整的滑动窗口,输出长度为 len(ar) - window + 1,多出的1个元素是原循环未覆盖的末尾窗口计算结果

验证代码

你可以直接运行以下代码验证数值一致性:

import numpy as np

window = 100
ar = np.random.rand(100000)
half_win = int(window/2)

# 原循环实现
PVI = []
for i in range(half_win, len(ar)-half_win):
    PVI.append(np.sqrt(np.mean(ar[i-half_win:i+half_win]**2)))
PVI = np.array(PVI)

# 你的cumsum实现
cumsum_vec = np.cumsum(np.insert(ar**2, 0, 0)) 
PVI_new = np.sqrt((cumsum_vec[window:] - cumsum_vec[:-window]) / window)

# 对比重叠部分数值
print("重叠窗口数值完全相等:", np.allclose(PVI, PVI_new[:-1]))
print("原循环输出长度:", len(PVI))
print("cumsum版本输出长度:", len(PVI_new))

运行后会得到重叠部分数值完全相等的结果。

对齐修正方案

如果需要cumsum版本和原循环输出完全等价,只需截取cumsum结果的前len(ar)-window个元素即可:

PVI_new = np.sqrt((cumsum_vec[window:] - cumsum_vec[:-window]) / window)[:-1]

该cumsum实现相比原循环性能提升超过100倍,完全满足提速需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:06:01