如何制作2D和3D矩阵的点积(分别针对每个维度)

时间:2019-06-26 12:05:34

标签: python numpy matrix dot-product

我需要计算两个矩阵的点积。 tensordot可能会胜任,但是我正在努力寻找确切的解决方案。

简单的选择

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

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

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

从字面上看,我希望我的结果“ res”为2维,其中每一个是x的一列和全维的一维的点积。

1 个答案:

答案 0 :(得分:0)

您可以这样做:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setExtendedState(JFrame.MAXIMIZED_BOTH);

f.addComponentListener(new ComponentAdapter()
{
    @Override
    public void componentResized(ComponentEvent e)
    {
        System.out.println(e.getComponent().getSize());
    }
});

f.setVisible(true);

如果要在中间添加其他单例尺寸,请执行以下操作:

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

使用res = np.expand_dims(res, 1) / @的等效解决方案是:

np.matmul