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

如何使用Numpy原生方法实现数组滑动窗口生成,提升大数组处理效率?

解决方案

你可以直接使用numpy.lib.stride_tricks.sliding_window_view接口实现无拷贝的滑动窗口生成,该接口在numpy 1.20.0及以上版本可用,处理数百万条数据时性能远高于Python循环,因为它只创建原数组的视图、不会额外复制数据。

示例代码如下:

import numpy as np

# 原数组
arr = np.array([
    [1, 0, 1],
    [0, 0, 2],
    [1, 2, 0],
    [0, 1, 3],
    [2, 2, 1],
    [2, 0, 2]
])
n = 4
# 沿第0维生成大小为n的滑动窗口
new_arr = np.lib.stride_tricks.sliding_window_view(arr, window_shape=n, axis=0)
# 调整维度顺序到你需要的 (窗口数, 窗口大小, 特征数)
new_arr = new_arr.transpose(0, 2, 1)

# 验证结果
print(new_arr)

运行后输出和你给出的预期结果完全一致。

如果你的numpy版本低于1.20.0,也可以用更底层的as_strided接口实现:

def sliding_window(arr, n):
    stride0, stride1 = arr.strides
    # 计算输出形状
    output_shape = (arr.shape[0] - n + 1, n, arr.shape[1])
    # 计算新数组的步长
    strides = (stride0, stride0, stride1)
    return np.lib.stride_tricks.as_strided(arr, shape=output_shape, strides=strides)

new_arr = sliding_window(arr, n)

注意:上述两种方法生成的都是原数组的视图,修改new_arr的值会同步修改原数组,如果需要独立的副本可以最后调用.copy()方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:04