如何将数组B中的列插入到Numpy矩阵数组A中?
解决Numpy数组插入列的问题
先明确下数组的形状:
- A是三维数组,形状为
(2, 4, 3),也就是2个包含4个3元素子数组的集合 - B是二维数组,形状为
(2, 4),对应要给A中每个子数组的开头插入一列值
你要的效果是把B中每个位置的元素,作为对应A子数组的第一列。不用纠结numpy.insert,用np.concatenate拼接更直接,步骤如下:
先把B扩展成三维数组,让它的维度和A匹配:
给B增加一个维度,变成(2, 4, 1),这样每个元素都成为单独的一列。把扩展后的B和A在**第2个轴(axis=2)**上拼接,因为我们要在每个子数组的列方向上合并。
完整代码如下:
import numpy as np # 定义原数组 A = np.array([[[1, 0, 0],[1, 1, 0],[0, 1, 0],[1, 1, 1]],[[1, 0, 0],[1, 1, 1],[0, 0, 1],[1, 0, 1]]]) B = np.array([[1,2,3,4],[5,6,7,8]]) # 扩展B的维度,匹配A的列维度 B_expanded = B[..., np.newaxis] # 拼接数组 result = np.concatenate([B_expanded, A], axis=2) print(result)
运行后输出的结果就是你要的目标数组:
[[[1 1 0 0] [2 1 1 0] [3 0 1 0] [4 1 1 1]] [[5 1 0 0] [6 1 1 1] [7 0 0 1] [8 1 0 1]]]
为什么numpy.insert不好用?因为insert更适合在单个轴上插入元素,但这里需要批量给每个子数组插入对应列,直接用insert需要做更多的维度调整和索引匹配,反而不如拼接简洁。
内容的提问来源于stack exchange,提问作者aqclsrt
相关产品推荐
相关产品推荐

