numpy:拆分二维 numpy 数组,然后创建二维对角块数组

问题描述

假设,我得到了一个 2D (n \times 2*n) numpy 数组,如下所示,

dat = np.array([[1,2,3,4],[5,6,7,8]])

我想把它平均分成两个二维数组,然后创建一个二维对角块数组,如下图,

a = dat[:,0:2]
b = dat[:,2:]
result = np.block([
    [a,np.zeros((2,2))],[np.zeros((2,2)),b              ]
])

numpy 中有没有更好的方法,我不需要指定这部分“np.zero((n,n))”

解决方法

使用scipy.linalg.block_diag

>>> import scipy.linalg
>>> scipy.linalg.block_diag(a,b)
array([[1,2,0],[5,6,[0,3,4],7,8]])

取自 this 帖子