2015-11-03 151 views
7

我有一個二維numpy數組,具有相同數量的列和行。我想將它們排列成一個更大的陣列,並在對角線上放置較小的陣列。應該可以指定起始矩陣應該在對角線上的頻率。例如:從給定的numpy數組創建塊對角線numpy陣列

a = numpy.array([[5, 7], 
       [6, 3]]) 

所以,如果我想這個數組對角線上的期望輸出2倍是:

array([[5, 7, 0, 0], 
     [6, 3, 0, 0], 
     [0, 0, 5, 7], 
     [0, 0, 6, 3]]) 

3次:

array([[5, 7, 0, 0, 0, 0], 
     [6, 3, 0, 0, 0, 0], 
     [0, 0, 5, 7, 0, 0], 
     [0, 0, 6, 3, 0, 0], 
     [0, 0, 0, 0, 5, 7], 
     [0, 0, 0, 0, 6, 3]]) 

有一個快速的方法用numpy方法和任意大小的起始數組實現這一點(仍然考慮起始數組具有相同數量的行和列)?

回答

11

numpy.kron經典案例 -

np.kron(np.eye(n), a) 

採樣運行 -

In [57]: n = 2 

In [58]: np.kron(np.eye(n), a) 
Out[58]: 
array([[ 5., 7., 0., 0.], 
     [ 6., 3., 0., 0.], 
     [ 0., 0., 5., 7.], 
     [ 0., 0., 6., 3.]]) 

In [59]: n = 3 

In [60]: np.kron(np.eye(n), a) 
Out[60]: 
array([[ 5., 7., 0., 0., 0., 0.], 
     [ 6., 3., 0., 0., 0., 0.], 
     [ 0., 0., 5., 7., 0., 0.], 
     [ 0., 0., 6., 3., 0., 0.], 
     [ 0., 0., 0., 0., 5., 7.], 
     [ 0., 0., 0., 0., 6., 3.]]) 
+0

你會如何做,如果你需要插入X不同矩陣轉換成對角線?我有80個不同的矩陣,需要做成一個塊對角矩陣。 –

+0

@ Will.Evo所有80個相同的形狀? – Divakar

+0

是的所有相同的形狀 –