如何用Numpy将arange生成的数组转为滑动窗口式二维数组?
Numpy实现滑动窗口二维数组转换
方法一:使用sliding_window_view(推荐,Numpy 1.20+可用)
这是Numpy官方提供的专门生成滑动窗口的工具,用法简单直观,无需手动计算步长:
import numpy as np values_points = np.arange(1,15) window_size = 5 # 生成滑动窗口数组 result = np.lib.stride_tricks.sliding_window_view(values_points, window_size) print(result)
运行后会直接输出你需要的二维数组,完全符合需求。
方法二:使用as_strided(适合理解滑动窗口原理)
如果你想手动控制底层的内存步长,可以用这个方法,需要先计算输出的行数和步长:
import numpy as np values_points = np.arange(1,15) window_size = 5 # 计算输出的行数:原数组长度 - 窗口大小 + 1 n_rows = values_points.size - window_size + 1 # 用as_strided生成滑动窗口 result = np.lib.stride_tricks.as_strided( values_points, shape=(n_rows, window_size), # 输出的形状:(行数, 窗口大小) strides=(values_points.strides[0], values_points.strides[0]) # 行步长和元素步长均为原数组的单个元素步长 ) print(result)
注意:使用as_strided时要确保计算的shape和strides不会越界访问内存,否则会得到错误的随机数据。
内容的提问来源于stack exchange,提问作者tiberhockey
相关产品推荐
相关产品推荐

