如何将二维numpy数组作为单列追加到另一个二维numpy数组中
实现需求的代码方案
你要的效果需要生成dtype=object的numpy数组,普通数值类型数组不支持单个位置存储子数组,具体实现如下:
方法1:先转object类型再拼接
import numpy as np # 你的原始数组 array2D_1 = np.arange(9).reshape(3,3) array2D_2 = np.arange(10,19).reshape(3,3) # 1. 把第一个数组转为object类型,支持存储非标量元素 arr1_obj = array2D_1.astype(object) # 2. 构造形状为(3,1)的object数组,每个元素对应第二个数组的一行 arr2_col = np.empty((array2D_2.shape[0], 1), dtype=object) for idx, row in enumerate(array2D_2): arr2_col[idx, 0] = row # 3. 沿列方向拼接 res = np.concatenate([arr1_obj, arr2_col], axis=1)
输出结果符合你的预期:
array([[0, 1, 2, array([10, 11, 12])], [3, 4, 5, array([13, 14, 15])], [6, 7, 8, array([16, 17, 18])]], dtype=object)
方法2:更简洁的列表推导式写法
如果不需要严格用numpy原生拼接操作,直接从列表构造更简单:
res = np.array([[*row1, row2] for row1, row2 in zip(array2D_1, array2D_2)], dtype=object)
原方法报错/不符合需求的原因
- 普通numpy数值数组默认所有元素都是同类型标量,
concatenate和append沿axis=1操作时,会默认扩展列维度,把第二个数组的每一行拆成独立的三列追加,所以得到3行6列的结果。 - 你尝试给array2D_2套一层列表后维度变成3维,和第一个数组的2维不匹配,所以触发维度不一致的报错。
内容的提问来源于stack exchange,提问作者Jürgen K.
相关产品推荐
相关产品推荐

