如何将Numpy数组列表按指定网格拼接为同秩矩阵
Numpy数组网格拼接实现方案
方法1:逐行拼接逻辑(直观易理解)
先按网格行数拆分列表为行组,拼接每行内的数组后再把所有行拼接在一起:
import numpy as np # 示例参数定义 H, W, C = 2, 3, 3 # 单个数组的高、宽、通道数 grid_rows, grid_cols = 3, 4 # 目标网格尺寸:3行4列 # 构造测试用的12个数组,每个填充不同数值方便验证结果 my_list = [np.full((H,W,C), fill_value=i, dtype=np.uint8) for i in range(12)] # 核心拼接逻辑 # 1. 按网格列数拆分出每一行对应的数组组 row_groups = [my_list[i*grid_cols : (i+1)*grid_cols] for i in range(grid_rows)] # 2. 沿宽度方向(axis=1)拼接每一行内的所有数组 row_arrays = [np.concatenate(group, axis=1) for group in row_groups] # 3. 沿高度方向(axis=0)拼接所有行得到最终结果 result = np.concatenate(row_arrays, axis=0) # 验证输出形状,应为(H*3, W*4, C) = (6, 12, 3) print(result.shape)
方法2:维度变换实现(更高效)
通过reshape和轴重排直接完成拼接,避免循环操作,性能更优:
import numpy as np H, W, C = 2, 3, 3 grid_rows, grid_cols = 3, 4 my_list = [np.full((H,W,C), fill_value=i, dtype=np.uint8) for i in range(12)] # 核心逻辑 arr = np.array(my_list) result = arr.reshape(grid_rows, grid_cols, H, W, C)\ .transpose(0, 2, 1, 3, 4)\ .reshape(grid_rows*H, grid_cols*W, C) print(result.shape)
提示:如果你的数组是通道优先格式(形状为
(C, H, W)),只需要对应调整拼接的axis参数或者transpose的维度顺序即可。
内容的提问来源于stack exchange,提问作者bluesummers
相关产品推荐
相关产品推荐

