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

发布于 2021-01-29 14:09:42

我在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]])

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

关注者
0
被浏览
227
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看