python - 如何制作 2D 和 3D 矩阵的点积(分别对每个维度进行计算)

标签 python numpy matrix dot-product

我需要计算两个矩阵的点积。也许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/

相关文章:

python - 使用字典插入或更新

python - tensorflow: "tf.gfile.GFile"中有问题, "' utf- 8' codec can' t 解码...”

python - Pandas - 加入 2 个数据集的 OR 条件

c - 如何显示字母在矩阵中的位置?

Matlab 从 3D 矩阵中删除所有其他元素

python - python range()[ :] 的切片行为

python - Django DB优化过滤器点击ip和1小时差异

python - 如何有效地循环此数据帧并使用内置的 numpy 或 pandas 执行函数?

python - 矩阵计算 Python

c++ - 从巨大的 txt 中读取二维矩阵