Python 行组的Numpy点积

Python 行组的Numpy点积,python,numpy,Python,Numpy,我试图计算两个矩阵之间的点积,每两行。 我有矩阵D和(ux2)维数,矩阵R和(ux2xc)维数。 下面是一个例子: D = np.array([[0.02747092, 0.11233295], [0.02747092, 0.07295284], [0.01245856, 0.19935923], [0.01245856, 0.13520913], [0.11233295, 0.072

我试图计算两个矩阵之间的点积,每两行。 我有矩阵
D
(ux2)
维数,矩阵R和
(ux2xc)
维数。 下面是一个例子:

D = np.array([[0.02747092, 0.11233295],
              [0.02747092, 0.07295284],
              [0.01245856, 0.19935923],
              [0.01245856, 0.13520913],
              [0.11233295, 0.07295284]])

R = np.array([[-3.        ,  0.        ,  1.        , -1.        ],
              [-1.25      ,  0.75      ,  1.75      , -1.25      ],
              [-2.33333333, -0.33333333,  1.66666667, -1.33333333],
              [-1.25      ,  0.75      ,  1.75      , -1.25      ],
              [ 0.        , -2.        ,  2.        , -4.        ],
              [-1.25      ,  0.75      ,  1.75      , -1.25      ],
              [ 0.66666667, -3.33333333,  2.66666667, -4.33333333],
              [-1.25      ,  0.75      ,  1.75      , -1.25      ],
              [-2.33333333, -0.33333333,  1.66666667, -1.33333333],
              [-3.        ,  0.        ,  1.        , -1.        ]])
结果应为矩阵M,尺寸
(u x c)
如下(第一行示例):

这是
D
的第一行与矩阵
R
的前两行之间的
dot
乘积的结果,如下所示:

D_ = np.array([[0.027, 0.11]])
R_ = np.array([[-3.,  0.,  1., -1.],
               [-1.25, 0.75, 1.75, -1.25]])

D_.dot(R_)

在将
D
矩阵重塑为张量后,我尝试了各种
np.tensordot
的方法,但没有成功。我正在寻找矢量化的解决方案,以避免循环(这是我目前的解决方案,相当缓慢)

R
重塑为3D并使用
np.einsum
-

np.einsum('ijk,ij->ik',R.reshape(len(D),2,-1),D)
np.einsum('ijk,ij->ik',R.reshape(len(D),2,-1),D)