我有两个3D数组A
和B
,它们的形状分别为(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
很大,我的解决方案就不会很有效。
答案 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