我需要计算两个矩阵的点积。也许tensordot可以完成这项工作,但是我正在努力找出确切的解决方案。
简单的选项
res = np.dot(x, fullkernel[:, :-1].transpose())
工作正常,其中 x 的形状为 (9999,),fullkernel 的形状为 (980,10000),res 的形状为 (1, 980)。
现在我需要在二维上做类似的事情。因此我的 x 现在的形状为 (9999, 2),fullkernel (2, 980, 10000)。
从字面上看,我希望结果“res”是二维的,其中每个维度都是一列 x 和一维 fullkernel 的 dot.product。
最佳答案
你可以这样做:
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)
关于python - 如何制作 2D 和 3D 矩阵的点积(分别对每个维度进行计算),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56772414/