2015-11-03 18 views
7

Ich habe ein 2-dimensionales numpy Array mit einer gleichen Anzahl von Spalten und Zeilen. Ich möchte sie in ein größeres Array mit den kleineren auf der Diagonale arrangieren. Es sollte möglich sein, anzugeben, wie oft die Startmatrix auf der Diagonalen liegen sollte. Zum Beispiel: Erstelle blockdiagonales numpy Array von einem gegebenen numpy Array

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

für 3 mal

:

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]]) 

Gibt es einen schnellen Weg

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

Also, wenn ich dieses Array 2 mal auf der Diagonalen der gewünschten Ausgabe wäre wollte um dies mit numpigen Methoden und für beliebige Größen des Startarrays zu implementieren (wobei das Startarray immer noch dieselbe Anzahl von Zeilen und Spalten hat)?

Antwort

11

klassischer Fall von numpy.kron -

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

Probelauf -

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

Wie würden Sie dies tun, wenn Sie x verschiedenen Matrizes in die Diagonale einfügen müssen? Ich habe 80 verschiedene Matrizen, die zu einer Blockdiagonalmatrix gemacht werden müssen. –

+0

@ Will.Evo Alle 80 der gleichen Formen? – Divakar

+0

Ja alle die gleiche Form –