用于在NumPy中创建块矩阵序列的矢量化语法

时间:2019-09-11 09:40:56

标签: python numpy

我有两个3D数组AB,它们的形状分别为(k, n, n)(k, m, m)。我想创建一个形状为C的矩阵(k, n+m, n+m),这样对于每个0 <= i < k,二维矩阵C[i,:,:]是通过放置A[i, :, :]而获得的块对角线矩阵位于左上n x n部分,B[i, :, :]位于右下m x m部分。

目前,我正在使用以下方法来实现此目标:NumPy:

C = np.empty((k, n+m, n+m))
for i in range(k):
    C[i, ...] = np.block([[A[i,...], np.zeros((n,m))],
                          [np.zeros((m,n)), B[i,...]]])

我想知道是否有没有for循环的方法。我认为如果k很大,我的解决方案就不会很有效。

1 个答案:

答案 0 :(得分:0)

IIUC您可以简单地切片和分配-

C = np.zeros((k, n+m, n+m),dtype=np.result_type(A,B))
C[:,:n,:n] = A
C[:,n:,n:] = B