scipy.linalg.

block_diag#

scipy.linalg.block_diag(*arrs)[источник]#

Создать блочно-диагональный массив из предоставленных массивов.

Например, для двумерных входных данных A, B и C, на выходе эти массивы будут расположены по диагонали:

[[A, 0, 0],
 [0, B, 0],
 [0, 0, C]]
Параметры:
A, B, C, …array_like

Входные массивы. 1-D массив или последовательность array_like длины n рассматривается как 2-D массив с формой (1, n). Любые измерения перед последними двумя обрабатываются как пакетные измерения; см. Пакетные линейные операции.

Возвращает:
Dndarray

Массив с A, B, C, … на диагонали последних двух измерений. D имеет тот же dtype, что и тип результата входных данных.

Примечания

Если все входные массивы квадратные, выходные данные известны как блочно-диагональная матрица.

Пустые последовательности (т.е. массивы нулевого размера) не будут игнорироваться. Примечательно, что оба [] и [[]] рассматриваются как матрицы с формой (1,0).

Примеры

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