如何使用numpy高效将二维数组分割为重叠瓦片并转换为目标格式
Numpy高性能数组转换方案
你需要实现的是原数组所有相邻2×2滑动窗口的提取与展平,以下方案基于numpy数组视图实现,无额外数据拷贝,适合处理超大维度数组:
核心代码实现
numpy 1.20.0+ 版本(推荐)
使用官方封装的滑动窗口视图接口,无需手动计算步长:
import numpy as np a = np.arange(1, 49).reshape(6, 8) # 生成所有2×2滑动窗口,输出shape为(5,7,2,2) windows = np.lib.stride_tricks.sliding_window_view(a, window_shape=(2, 2)) # 调整维度得到目标数组b b = windows.reshape(-1, 4)
执行后可直接验证:np.array_equal(b, 你给出的目标b数组) 返回值为True。
低版本numpy兼容实现
使用as_strided手动构造视图:
import numpy as np from numpy.lib.stride_tricks import as_strided a = np.arange(1, 49).reshape(6, 8) row_num, col_num = a.shape win_h, win_w = 2, 2 # 计算输出维度 out_row = row_num - win_h + 1 out_col = col_num - win_w + 1 # 构造滑动窗口视图 windows = as_strided( a, shape=(out_row, out_col, win_h, win_w), strides=a.strides * 2 ) b = windows.reshape(-1, win_h * win_w)
注意:
as_strided不做边界校验,需确保shape和strides参数计算准确,避免访问越界。
内容的提问来源于stack exchange,提问作者Omid
相关产品推荐
相关产品推荐

