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

如何无循环计算Numpy数组的滑动窗口(窗口大小4)求和

Numpy实现无循环的非重叠滑动窗口求和(窗口大小4)

针对你的需求,这里提供几种高效的无循环解决方案,适配你给出的示例场景:

方法1:直接重塑数组(最简洁,适用于数组长度为窗口大小整数倍)

如果你的数组长度恰好是窗口大小的整数倍(比如示例中12是4的3倍),直接用reshape将数组分成多行,再对每行求和即可:

import numpy as np

A = np.array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])
result = A.reshape(-1, 4).sum(axis=1)
print(result)  # 输出: array([7, 2, 8])

reshape(-1, 4)会自动将原数组拆分为每行4个元素的二维数组,sum(axis=1)对每行完成求和操作,全程无循环,效率极高。

方法2:使用滑动窗口视图(灵活适配任意数组长度/步长)

如果数组长度不是窗口大小的整数倍,或者需要调整滑动步长,可以用Numpy 1.20+提供的sliding_window_view生成窗口视图,再筛选需要的窗口求和:

import numpy as np

A = np.array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])
# 生成所有步长为1的窗口视图,再按步长4筛选非重叠窗口
windows = np.lib.stride_tricks.sliding_window_view(A, window_shape=4)[::4]
result = windows.sum(axis=1)
print(result)  # 输出: array([7, 2, 8])

sliding_window_view生成的是原数组的视图(不占用额外内存),[::4]用来选取间隔4的窗口,实现非重叠的效果。

方法3:使用卷积函数(通用滑动窗口求和场景)

利用卷积运算的特性,也可以实现滑动窗口求和,适合通用场景:

import numpy as np

A = np.array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])
# 用全1卷积核计算所有步长1的窗口和,再筛选非重叠结果
result = np.convolve(A, np.ones(4, dtype=int), mode='valid')[::4]
print(result)  # 输出: array([7, 2, 8])

np.convolve的mode='valid'参数会返回所有完整窗口的求和结果,再通过[::4]筛选出非重叠的块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:52:54