首页 > 解决方案 > Numpy 对称 4D 矩阵构造

问题描述

我想构造一个具有以下结构的数组:

A[i,j,i,j,] = B[i,j]与所有其他条目 0:A[i,j,l,k]=0 # (i,j) =\= (l,k)

即,如果我B构建了矩阵,我该如何创建矩阵A,最好以矢量化方式。

明确地,让B = [[1,2],[3,4]]

然后:

A[1,1,:,:]=[[1,0],[0,0]]
A[1,2,:,:]=[[0,2],[0,0]]
A[2,1,:,:]=[[0,0],[3,0]]
A[2,2,:,:]=[[0,0],[0,4]]

标签: pythonnumpyarray-broadcasting

解决方案


我们可以使用开放网格来分配A跨轴广播索引数组:

B = np.array([[1,2],[3,4]])
i,j = B.shape
A = np.zeros([i,j,i,j])
i, j = np.ogrid[:i, :j]
A[i,j,i,j] = B

print(A)

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

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


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

        [[0., 0.],
         [0., 4.]]]])

推荐阅读