Numpy:在另一个不同维度的矩阵上添加矩阵行

时间:2014-06-18 17:36:33

标签: python numpy matrix

我有两个矩阵

A = np.array(
    [[1,2,3],
     [4,5,6],
     [7,8,9]])

B = np.array(
    [[1,1,1],
     [2,2,2]])

我想有一个矩阵,即3x3x2 [[A + B的第一行],[A +第二行B]]

C = np.array(
    [[[2,3,4],
      [5,6,7],
      [8,9,10]],
     [[3,4,5],
      [6,7,8],
      [9,10,11]]])

我知道我可以做np.concatenate((A + B [0],A + B [1])),但我不知道B预先包含了多少行我自己的编程经验如果有更简洁的方法,我很好奇。

1 个答案:

答案 0 :(得分:1)

您的A =B =命令不会生成矩阵,但会生成列表。差异很重要,因为它们没有附加numpy的漂亮矢量数学。

无论如何,您可以通过使用A创建新轴来展开[:,None],进行添加,然后交换轴以获得所需的形状:

>>> A = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> B = np.array([[1,1,1], [2,2,2]])
>>> (A[:, None] + B).swapaxes(0,1)
array([[[ 2,  3,  4],
        [ 5,  6,  7],
        [ 8,  9, 10]],

       [[ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]]])

请注意,这有形状(2,3,3),而不是(3,3,2),但这是你的C形状,所以我选择了它。