如何在Python中按行和列合并不同维度的两个数组?
在Python中合并不同维度的数组
在Python中处理这类数组合并,通常使用numpy库来实现,核心步骤是先扩展低维数组的维度,使其与高维数组的维度匹配,再进行合并。以下是针对你需求的两种合并方式:
1. 按列方向合并(扩展第三个维度)
这里的列方向对应三维数组的第三个轴(axis=2)(即原数组中1200的维度)。需要先把二维数组arr2扩展为(150, 1400, 1)的三维数组,再和arr1在列维度上合并:
import numpy as np # 创建示例数组(替换为你的实际数组) arr1 = np.random.rand(150, 1400, 1200) arr2 = np.random.rand(150, 1400) # 扩展arr2的维度:从(150,1400)转为(150,1400,1) arr2_expanded = arr2[..., np.newaxis] # 等价于 arr2.reshape(150, 1400, 1) # 执行列方向合并 merged_col = np.concatenate([arr1, arr2_expanded], axis=2) print(merged_col.shape) # 输出: (150, 1400, 1201)
2. 按行方向合并(扩展第二个维度)
这里的行方向对应三维数组的第二个轴(axis=1)(即原数组中1400的维度)。由于arr1在第三个轴有1200列,需要先将arr2的每个值重复1200次,扩展为(150, 1400, 1200)的三维数组,再和arr1在行维度上合并:
# 扩展arr2的维度:从(150,1400)转为(150,1400,1200) arr2_expanded = np.repeat(arr2[..., np.newaxis], repeats=1200, axis=2) # 执行行方向合并 merged_row = np.concatenate([arr1, arr2_expanded], axis=1) print(merged_row.shape) # 输出: (150, 2800, 1200)
关键注意事项
- 若你所说的“行/列方向”对应其他轴(比如第一个轴
axis=0,即150的维度),只需调整concatenate的axis参数,并确保arr2的维度与arr1对应轴的维度匹配即可。 - 虽然
numpy.hstack/numpy.vstack等便捷函数也能实现堆叠,但对于三维数组,直接使用numpy.concatenate并指定轴参数会更直观,避免混淆。
内容的提问来源于stack exchange,提问作者Damien Rice
相关产品推荐
相关产品推荐

