2014-06-18 128 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