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