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

Python中按指定维度拆分与合并Numpy多维数组的方法

在Python中对多维NumPy数组按指定维度拆分与合并的正确方法

核心思路

NumPy中对多维数组的拆分与合并需要基于**轴(axis)**操作,而非单纯依赖reshape——因为reshape仅改变形状,不调整元素的轴方向,容易导致顺序错乱或断言失败。

示例场景:3×3×3数组的拆分与合并

先定义原数组:

import numpy as np

A = np.array([[[111,112,113],[121,122,123],[131,132,133]],  
              [[211,212,213],[221,222,223],[231,232,233]],  
              [[311,312,313],[321,322,323],[331,332,333]]])

1. 按最后一维(轴2)拆分

NumPy的轴从0开始计数,3×3×3数组的最后一维是轴2,有两种拆分方式:

方式一:直接按索引切片(最直观)

直接提取每个轴2对应的切片,得到3个形状为(3,3)的数组:

A1 = A[:, :, 0]
A2 = A[:, :, 1]
A3 = A[:, :, 2]

此时A1、A2、A3完全匹配你给出的结果。

方式二:用np.split批量拆分

通过np.split指定拆分轴和份数,再用squeeze去掉多余的单维度:

# 按轴2拆分为3份,每份形状为(3,3,1)
split_parts = np.split(A, A.shape[2], axis=2)
# 去除最后一维,得到(3,3)的数组
A1, A2, A3 = [part.squeeze(axis=2) for part in split_parts]

2. 合并回原形状

不能直接用reshape,需用np.stack或np.concatenate指定合并轴:

方式一:用np.stack(推荐)

np.stack会在指定轴上堆叠数组,直接恢复原形状:

merged_A = np.stack([A1, A2, A3], axis=2)

方式二:用np.concatenate

先给每个拆分后的数组增加最后一维,再沿轴2合并:

# 给每个数组增加最后一维,形状变为(3,3,1)
A1_expanded = A1[:, :, np.newaxis]
A2_expanded = A2[:, :, np.newaxis]
A3_expanded = A3[:, :, np.newaxis]
# 沿轴2合并
merged_A = np.concatenate([A1_expanded, A2_expanded, A3_expanded], axis=2)

验证合并结果:

print(np.array_equal(merged_A, A))  # 输出True,说明与原数组完全一致

扩展到4维数组(a×b×c×d)

拆分(按第4维度,即轴3)

original_arr = np.random.rand(a, b, c, d)  # 示例4维数组

# 方式一:遍历索引拆分
split_arrays = [original_arr[:, :, :, i] for i in range(d)]
# 方式二:用np.split拆分
split_arrays = [part.squeeze(axis=3) for part in np.split(original_arr, d, axis=3)]

合并回原形状

# 方式一:stack堆叠
merged_arr = np.stack(split_arrays, axis=3)
# 方式二:concatenate合并
expanded_arrays = [arr[:, :, :, np.newaxis] for arr in split_arrays]
merged_arr = np.concatenate(expanded_arrays, axis=3)

为什么reshape会失败?

reshape仅改变数组的形状描述,不调整元素的存储顺序(NumPy默认按行优先存储)。拆分后的数组元素顺序与原数组的轴方向不匹配,直接reshape会导致元素排列错乱,甚至因维度逻辑不兼容触发断言错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:47