scipy.linalg.

block_diag#

scipy.linalg.block_diag(*arrs)[源码]#

从提供的数组创建块对角数组。

例如,给定二维输入 ABC,输出将把这些数组排列在对角线上。

[[A, 0, 0],
 [0, B, 0],
 [0, 0, C]]
参数:
A, B, C, …类数组

输入数组。长度为 n 的一维数组或类数组序列被视为形状为 (1, n) 的二维数组。最后两个维度之前的任何维度都被视为批处理维度;请参阅 批处理线性操作

返回:
Dndarray

数组 D 在最后两个维度的对角线上包含 ABC 等。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.]])