与三维中每个元素的矩阵乘法

Matrix multiplication with each element in third dimension

我在形状为 64x64x4 的 numpy 数组中有 3D 坐标 (x, y, z, 1) 的 2D 图像。我想用 4x4 形状的相机剪辑投影矩阵来投影它们中的每一个。我有以下代码:

notProjected.shape # (64, 64, 4)
clipToWorld.shape # (4, 4)
projected = np.zeros(notProjected)
for x in range(notProjected.shape[0]):
    for y in range(notProjected.shape[1]):
        projected[x, y] = clipToWorld @ notProjected

这行得通,但是有没有更简洁/更优化的方法来做到这一点?我会假设 indexing/copying 像这样相当慢。我对 Numpy 很陌生。 np.einsum这里好像可以用,不知道怎么用

假设您有 notProjected.shape => (x, y, z, 1),使用 np.einsum:

notProjected.shape # (64, 64, 4, 1) ?
clipToWorld.shape # (4, 4)
np.einsum('ijkl, km -> ijml', notProjected, clipToWorld)

使用当前形状:

notProjected.shape # (64, 64, 4)
clipToWorld.shape # (4, 4)
projected = notProjected @ clipToWorld