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

无需循环高效计算矩阵中每3个连续元素的滑动和

高效实现滑动窗口求和(无循环)

给定输入数组:

import numpy as np

arr = np.array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
                [ 2,  6,  8,  3,  5,  6,  8,  9,  1,  2]])

需要计算每行的长度为3的滑动窗口求和(即连续3个元素依次累加,窗口每次右移1位),最终得到目标结果:

result = np.array([[6, 9, 12, 15, 18, 21, 24, 27],
                   [16, 17, 16, 14, 19, 23, 18, 12]])

方法1:使用numpy.lib.stride_tricks.sliding_window_view

这是NumPy 1.20+版本提供的专门生成滑动窗口的工具,直观且高效:

# 生成每行的滑动窗口(窗口大小3)
windows = np.lib.stride_tricks.sliding_window_view(arr, window_shape=3, axis=1)
# 沿窗口轴求和
result = windows.sum(axis=2)

方法2:使用numpy.convolve

利用卷积运算的特性,用全1的卷积核实现滑动求和,适配低版本NumPy:

# 定义卷积核(长度为3,全1)
kernel = np.ones(3, dtype=int)
# 对每行分别做卷积,模式设为'valid'只保留有效结果
result = np.array([np.convolve(row, kernel, mode='valid') for row in arr])

两种方法均无需显式循环,底层由NumPy优化的C代码实现,运算效率远高于Python原生循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:42:37