【问题标题】:Numpy dot product for group of rows行组的 Numpy 点积
【发布时间】:2020-01-29 09:40:50
【问题描述】:

我正在尝试为每两行计算两个矩阵之间的点积。 我有矩阵D(u x 2) 尺寸和矩阵R 和(u*2 x c) 尺寸。 下面是一个例子:

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),如下(第一行示例):

M = np.array([[-0.2185,  0.0825,  0.2195, -0.1645],
              [...]])

这是dot 第一行D 和矩阵R 前两行之间的乘积:

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 的各种方法,但没有任何运气。我正在寻找矢量化解决方案并避免循环(这是我当前的解决方案,非常慢)。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多