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

如何在Python中将3024x4032x3三维数组重塑为nx20x20x3四维数组?

滑动窗口提取图像子块并生成四维数组

方法一:使用skimage的view_as_windows(推荐)

view_as_windows是专门处理滑动窗口的工具,无需手动计算步长,生成的是原数组的视图(不占用额外内存),效率很高。

import numpy as np
from skimage.util import view_as_windows

# 假设img是已读取的(H, W, 3)格式NumPy数组
H, W, _ = img.shape
window_size = (20, 20)

# 生成滑动窗口,step=1表示窗口每次移动1个像素
windows = view_as_windows(img, window_shape=(20, 20, 3), step=1)

# 将形状为(H-19, W-19, 20, 20, 3)的数组转为四维数组(子块总数, 20, 20, 3)
four_d_array = windows.reshape(-1, 20, 20, 3)

方法二:纯NumPy实现

通过np.lib.stride_tricks.as_strided手动构造滑动窗口视图,需要计算数组的步长参数:

import numpy as np

# 假设img是已读取的(H, W, 3)格式NumPy数组
H, W, _ = img.shape
window_h, window_w = 20, 20

# 计算各维度的步长(字节数)
strides = img.strides + img.strides[:2]
# 定义输出形状:(窗口行数, 窗口列数, 窗口高, 窗口宽, 通道数)
output_shape = (H - window_h + 1, W - window_w + 1, window_h, window_w, 3)

# 生成滑动窗口视图
windows = np.lib.stride_tricks.as_strided(img, shape=output_shape, strides=strides)
# 转为四维数组
four_d_array = windows.reshape(-1, 20, 20, 3)

补充说明

  • 如果需要调整窗口滑动步长,只需修改view_as_windows的step参数(或手动调整output_shape的计算逻辑),比如步长设为2时,子块数量会相应减少。
  • 两种方法生成的四维数组,每个元素都是原图像上的20x20x3子块,顺序为从左到右、从上到下滑动得到的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:30:58