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

如何使用Numpy将数组分割为滑动式等长子数组?

使用Numpy实现滑动窗口分割数组

你需要的是步长为1、窗口大小为4的滑动窗口分割,np.array_split是无重叠的均分逻辑,不符合需求。下面提供两种基于Numpy的解决方案:

方法一:使用np.lib.stride_tricks.sliding_window_view(推荐,Numpy 1.20+)

这是Numpy官方推出的专门用于滑动窗口的工具,安全且简洁,无需手动处理内存 stride:

import numpy as np

my_array = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14])
# 窗口大小设为4,步长默认1
windowed_array = np.lib.stride_tricks.sliding_window_view(my_array, window_shape=4)

print(windowed_array)

输出结果:

[[ 1  2  3  4]
 [ 2  3  4  5]
 [ 3  4  5  6]
 [ 4  5  6  7]
 [ 5  6  7  8]
 [ 6  7  8  9]
 [ 7  8  9 10]
 [ 8  9 10 11]
 [ 9 10 11 12]
 [10 11 12 13]
 [11 12 13 14]]

结果是一个形状为(11,4)的二维数组,正好对应你需要的11个重叠子数组。

方法二:使用np.lib.stride_tricks.as_strided(兼容旧版Numpy)

如果你使用的Numpy版本低于1.20,可以手动通过as_strided实现,但需要注意:直接操作内存 stride 可能导致越界访问,必须严格计算形状和步长:

import numpy as np

my_array = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14])
window_size = 4
# 计算子数组数量
num_windows = len(my_array) - window_size + 1
# 获取数组元素的字节大小
element_size = my_array.itemsize

# 构建滑动窗口数组
windowed_array = np.lib.stride_tricks.as_strided(
    my_array,
    shape=(num_windows, window_size),
    strides=(element_size, element_size)
)

print(windowed_array)

输出结果和方法一完全一致,但这种方法需要手动管理 stride,不如sliding_window_view安全,优先推荐方法一。

内容的提问来源于stack exchange,提问作者Tolga Dönmez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:10:15