如何用Python Numpy将一维数组转换为指定二维数组?
高效生成Numpy滑动窗口二维矩阵的方法
给定一维Numpy数组:
arr = np.array([0, 1, 2, 3, 4, 5])
想要生成每3个连续元素组成的二维矩阵,不用for循环的话,有两种高效的Numpy原生方法:
方法一:使用sliding_window_view(推荐,Numpy 1.20+)
这是Numpy官方推荐的滑动窗口实现,安全易用,直接基于内存视图生成结果,不会额外复制数据,效率拉满:
import numpy as np arr = np.array([0, 1, 2, 3, 4, 5]) result = np.lib.stride_tricks.sliding_window_view(arr, window_shape=3) print(result)
运行后输出:
[[0 1 2] [1 2 3] [2 3 4] [3 4 5]]
方法二:使用as_strided(兼容旧版本Numpy)
如果你的Numpy版本低于1.20,可以用as_strided手动构造滑动窗口,但需要自行计算形状和步长,注意不要越界访问内存:
import numpy as np arr = np.array([0, 1, 2, 3, 4, 5]) window_size = 3 n_windows = arr.size - window_size + 1 result = np.lib.stride_tricks.as_strided( arr, shape=(n_windows, window_size), strides=(arr.strides[0], arr.strides[0]) ) print(result)
输出和上面一致。
这两种方法都远优于for循环,尤其是处理大数组时,能充分利用Numpy的向量化运算优势,避免Python循环的性能瓶颈。
内容的提问来源于stack exchange,提问作者Ben Lahav
相关产品推荐
相关产品推荐

