Skip to main content
`Ctrl`+`K`
scipy.linalg.

# block_diag

scipy.linalg.block_diag(*arrs)

  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:
    D ndarray

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