scipy.linalg.

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 n wird 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.]])