scipy.linalg.
block_diag#
- scipy.linalg.block_diag(*arrs)[source]#
Create a block diagonal array from provided arrays.
For example, given 2-D inputs A, B and C, the output will have these arrays arranged on the diagonal:
[[A, 0, 0], [0, B, 0], [0, 0, C]]
- Parameters:
- A, B, C, …array_like
Input arrays. A 1-D array or array_like sequence of length
n
is treated as a 2-D array with shape(1, n)
. Any dimensions before the last two are treated as batch dimensions; see Batched Linear Operations.
- Returns:
- Dndarray
Array with A, B, C, … on the diagonal of the last two dimensions. D has the same dtype as the result type of the inputs.
Notes
If all the input arrays are square, the output is known as a block diagonal matrix.
Empty sequences (i.e., array-likes of zero size) will not be ignored. Noteworthy, both
[]
and[[]]
are treated as matrices with shape(1,0)
.Examples
>>> 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.]])