拼接分块后的3D NumPy数组问题求助
重新拼接分块3D NumPy数组恢复完整数据集
示例场景解决方案
你的分块是按照2×2网格划分的(横向2块、纵向2块),每个分块形状为(2,2,2)。要得到目标结果,可通过以下两种方法实现:
方法1:分步拼接
先横向拼接同组相邻分块(沿最后一维axis=2),再纵向拼接各组结果(沿中间一维axis=1):
import numpy as np yellow_chunk = np.array([[[1,2], [5,6]], [[17,18], [21,22]]]) green_chunk = np.array([[[3,4], [7,8]], [[19,20], [23,24]]]) blue_chunk = np.array([[[9,10], [13,14]], [[25,26], [29,30]]]) red_chunk = np.array([[[11,12], [15,16]], [[27,28], [31,32]]]) # 横向拼接第一行的两个块 top_row = np.concatenate([yellow_chunk, green_chunk], axis=2) # 横向拼接第二行的两个块 bottom_row = np.concatenate([blue_chunk, red_chunk], axis=2) # 纵向拼接两行得到最终结果 output = np.concatenate([top_row, bottom_row], axis=1) print(output)
输出与你期望的结果完全一致。
方法2:通用网格重组(适合大规模分块)
如果分块数量较多(比如你的实际场景16×16),可先将所有分块整理成分块网格数组,再通过轴变换和重塑完成拼接,无需手动分步操作:
# 将分块按2×2网格排列(行优先顺序) chunk_grid = np.array([[yellow_chunk, green_chunk], [blue_chunk, red_chunk]]) # chunk_grid形状为(2,2,2,2,2) → (块行数, 块列数, 数据轴0, 数据轴1, 数据轴2) # 调整轴顺序:保留数据轴0,将块行维度与数据轴1合并、块列维度与数据轴2合并 rearranged = chunk_grid.transpose(2, 0, 3, 1, 4) # 重塑数组,合并对应维度得到最终形状 output = rearranged.reshape(2, 2*2, 2*2)
实际场景适配(16×16分块,每个分块16×128×16)
假设你已将16×16个分块整理为形状(16,16,16,128,16)的网格数组chunk_grid,执行以下步骤即可得到完整数据集:
- 调整轴顺序:保留数据第一维,将块行维度与数据第二维合并、块列维度与数据第三维合并
- 重塑数组,合并对应维度得到最终规模
代码示例:
# 假设chunk_grid是整理好的16×16分块网格,形状(16,16,16,128,16) rearranged = chunk_grid.transpose(2, 0, 3, 1, 4) full_dataset = rearranged.reshape(16, 16*128, 16*16)
如果分块以列表形式存储(比如长度256的列表chunks),可先将列表重塑为网格数组:
chunk_grid = np.array(chunks).reshape(16,16,16,128,16)
内容的提问来源于stack exchange,提问作者jchung
相关产品推荐
相关产品推荐

