block_diag#
- scipy.linalg.block_diag(*arrs)[Quelle]#
Erstellt ein blockdiagonal angeordnetes Array aus den bereitgestellten Arrays.
Wenn beispielsweise 2D-Eingaben A, B und C gegeben sind, enthält die Ausgabe diese Arrays, die auf der Diagonalen angeordnet sind
[[A, 0, 0], [0, B, 0], [0, 0, C]]
- Parameter:
- A, B, C, …array_like
Eingabearrays. Ein 1D-Array oder eine array_like-Sequenz der Länge
nwird als 2D-Array mit der Form(1, n)behandelt. Alle Dimensionen vor den letzten beiden werden als Batch-Dimensionen behandelt; siehe Batched Linear Operations.
- Rückgabe:
- Dndarray
Array mit A, B, C, … auf der Diagonalen der letzten beiden Dimensionen. D hat denselben dtype wie der Ergebnistyp der Eingaben.
Hinweise
Wenn alle Eingabearrays quadratisch sind, ist die Ausgabe als blockdiagonale Matrix bekannt.
Leere Sequenzen (d. h. Array-ähnliche Elemente mit Nullgröße) werden nicht ignoriert. Bemerkenswert ist, dass sowohl
[]als auch[[]]als Matrizen mit der Form(1,0)behandelt werden.Beispiele
>>> import numpy as np >>> from scipy.linalg import block_diag >>> A = [[1, 0], ... [0, 1]] >>> B = [[3, 4, 5], ... [6, 7, 8]] >>> C = [[7]] >>> P = np.zeros((2, 0), dtype='int32') >>> block_diag(A, B, C) array([[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 3, 4, 5, 0], [0, 0, 6, 7, 8, 0], [0, 0, 0, 0, 0, 7]]) >>> block_diag(A, P, B, C) array([[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 3, 4, 5, 0], [0, 0, 6, 7, 8, 0], [0, 0, 0, 0, 0, 7]]) >>> block_diag(1.0, [2, 3], [[4, 5], [6, 7]]) array([[ 1., 0., 0., 0., 0.], [ 0., 2., 3., 0., 0.], [ 0., 0., 0., 4., 5.], [ 0., 0., 0., 6., 7.]])