scipy.linalg.
block_diag#
- scipy.linalg.block_diag(*arrs)[源码]#
从提供的数组创建块对角数组。
例如,给定二维输入 A、B 和 C,输出将把这些数组排列在对角线上。
[[A, 0, 0], [0, B, 0], [0, 0, C]]
- 参数:
- A, B, C, …类数组
输入数组。长度为
n
的一维数组或类数组序列被视为形状为(1, n)
的二维数组。最后两个维度之前的任何维度都被视为批处理维度;请参阅 批处理线性操作。
- 返回:
- Dndarray
数组 D 在最后两个维度的对角线上包含 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.]])