如何制作 2D 和 3D 矩阵的 dot.product(分别为每个维度取)

How to make dot.product of 2D and 3D matrices (taking it for each dimension separately)

我需要计算两个矩阵的点积。 tensordot 可能会完成这项工作,但我正在努力找出确切的解决方案。

简单选项

res = np.dot(x, fullkernel[:, :-1].transpose())

工作正常,其中 x 的形状为 (9999,),fullkernel 的形状为 (980,10000),res 的形状为 (1, 980)。

现在我需要用二维做类似的事情。因此,我的 x 现在具有形状 (9999, 2),完整内核 (2, 980, 10000)。

从字面上看,我希望我的结果 "res" 是二维的,其中每个都是 dot.product x 的一列和 fullkernel 的一维。

你可以这样做:

res = np.einsum('ki,ijk->ij', x, fullkernel[:, :, :-1])
print(res.shape)
# (2, 980)

如果你想在中间添加额外的单例维度,只需执行以下操作:

res = np.expand_dims(res, 1)

@ / np.matmul 的等效解决方案是:

res = np.expand_dims(x.T, 1) @ np.moveaxis(fullkernel[:, :, :-1], 2, 1)
print(res.shape)
# (2, 1, 980)