与三维中每个元素的矩阵乘法
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
我在形状为 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