2014-06-18 106 views
0

的另一个矩阵我有两个矩阵numpy的:添加矩阵的行通过不同尺寸

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

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

我想有一个矩阵,该矩阵是3x3x2这是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])),但我不知道A +第二行B预先包含了多少行,并且对于我自己的编程体验,我很好奇是否有更干净的方法来执行此操作。

回答

1

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

不管怎么说,你可以通过创建使用[:,None]新轴扩大A,做加法,然后交换轴得到你想要的形状:

>>> 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的形状,所以我就这样做了。

+0

啊,是的,我并不是想暗示我使用列表而不是numpy数组。你的解决方案非常好,我将不得不添加新轴的创建并重塑我的numpy武库。谢谢! – abnowack