如何将块转换为块对角矩阵(NumPy)

我在NumPy中有三个相同大小的正方形矩阵。我想将它们组合成块对角矩阵。

例:

a1 = np.array([[1,1,1],[1,1,1],[1,1,1]])

a2 = np.array([[2,2,2],[2,2,2],[2,2,2]])

a3 = np.array([[3,3,3],[3,3,3],[3,3,3]])

r = np.array([[1,1,1,0,0,0,0,0,0],[1,1,1,0,0,0,0,0,0],[1,1,1,0,0,0,0,0,0],[0,0,0,2,2,2,0,0,0],[0,0,0,2,2,2,0,0,0],[0,0,0,2,2,2,0,0,0],[0,0,0,0,0,0,3,3,3],[0,0,0,0,0,0,3,3,3],[0,0,0,0,0,0,3,3,3]])

做这个的最好方式是什么?

回答:

scipy.linalg具有block_diag函数以自动执行此操作

>>> a1 = np.array([[1,1,1],[1,1,1],[1,1,1]])

>>> a2 = np.array([[2,2,2],[2,2,2],[2,2,2]])

>>> a3 = np.array([[3,3,3],[3,3,3],[3,3,3]])

>>> import scipy.linalg

>>> scipy.linalg.block_diag(a1, a2, a3)

array([[1, 1, 1, 0, 0, 0, 0, 0, 0],

[1, 1, 1, 0, 0, 0, 0, 0, 0],

[1, 1, 1, 0, 0, 0, 0, 0, 0],

[0, 0, 0, 2, 2, 2, 0, 0, 0],

[0, 0, 0, 2, 2, 2, 0, 0, 0],

[0, 0, 0, 2, 2, 2, 0, 0, 0],

[0, 0, 0, 0, 0, 0, 3, 3, 3],

[0, 0, 0, 0, 0, 0, 3, 3, 3],

[0, 0, 0, 0, 0, 0, 3, 3, 3]])

>>> r = np.array([[1,1,1,0,0,0,0,0,0],[1,1,1,0,0,0,0,0,0],[1,1,1,0,0,0,0,0,0], [0,0,0,2,2,2,0,0,0],[0,0,0,2,2,2,0,0,0],[0,0,0,2,2,2,0,0,0],[0,0,0,0,0,0,3,3,3],[0,0,0,0,0,0,3,3,3],[0,0,0,0,0,0,3,3,3]])

>>> (scipy.linalg.block_diag(a1, a2, a3) == r).all()

True

以上是 如何将块转换为块对角矩阵(NumPy) 的全部内容, 来源链接: utcz.com/qa/424195.html

回到顶部