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

无需pd.Series,如何在NumPy中高效实现移位与滚动求和?

纯NumPy高效实现方案

核心思路

利用前缀和实现滑动窗口求和,时间复杂度O(n),完全规避Pandas对象的封装开销,适合大规模数组的高效处理。

实现代码

import numpy as np

sumvalues = 2
touchdown = 3
arr = np.array([1, 2, 3, 4, 5, 6, 7])

# 1. 构造扩展数组:原数组末尾补touchdown个0
ext_arr = np.concatenate([arr, np.zeros(touchdown, dtype=arr.dtype)])

# 2. 计算前缀和数组
prefix = np.cumsum(ext_arr)

# 3. 计算滑动窗口求和,处理窗口长度不足sumvalues的边界情况
window_sums = np.empty_like(ext_arr, dtype=np.float64)
# 前sumvalues个元素,直接取前缀和(窗口从数组开头到当前位置)
window_sums[:sumvalues] = prefix[:sumvalues]
# 从第sumvalues个元素开始,用前缀和差值得到完整窗口的和
window_sums[sumvalues:] = prefix[sumvalues:] - prefix[:-sumvalues]

# 4. 截取从touchdown索引开始的部分,得到最终结果
result = window_sums[touchdown:]

print(result)

输出验证

运行代码后输出与原Pandas实现完全一致:

[ 7.  9. 11. 13.  7.  0.  0.]

效率说明

  • 前缀和计算是NumPy内置的高度优化操作,相比Pandas的rolling方法,省去了Series对象的额外开销。
  • 针对百万级以上的超大数组,该方法的运行速度会比原Pandas实现快数倍甚至一个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:20