【问题标题】:Combine Matrices row-wise by weighting them in Python通过在 Python 中对矩阵进行加权来逐行组合矩阵
【发布时间】:2019-10-15 02:48:17
【问题描述】:

我有 N 个尺寸为 R x R 的矩阵和一个尺寸为 R x 的“权重矩阵” 。 现在我想通过使用“权重矩阵”对它们进行加权来逐行组合这些 N 矩阵。最后我想要一个 R x R 矩阵。

让我给你看一个例子: 在以下示例中,我的初始矩阵是 a 和 b,我的权重矩阵是 c。所需的输出是矩阵 r。

r的第一行就是a的第一行,因为c[0,0]是1,c[0,1]是0,所以我们只考虑矩阵a的第一行。

r 的第二行是矩阵 a 和 b 的第 2 行的加权平均值(因为 c[1,0]= 0.5 和 c[1,1] = 0.5)。

r的第三行是b的第三行,因为c[2,0]是0,c[2,1]是1,所以我们只考虑矩阵b的第三行。

如何在 Python 中执行此操作(最好使用 numpy 函数)?

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

    我们可以使用np.einsum -

    In [57]: A # 3D input array
    Out[57]: 
    array([[[0.2, 0. , 0.8],
            [0. , 0. , 1. ],
            [0. , 0.2, 0.8]],
    
           [[1. , 0. , 0. ],
            [0. , 0.2, 0.8],
            [0.2, 0. , 0.8]]])
    
    In [58]: c # 2D weight array
    Out[58]: 
    array([[1. , 0. ],
           [0.5, 0.5],
           [0. , 1. ]])
    
    In [59]: np.einsum('ijk,ji->jk',A,c)
    Out[59]: 
    array([[0.2, 0. , 0.8],
           [0. , 0.1, 0.9],
           [0.2, 0. , 0.8]])
    

    或者np.matmul -

    In [142]: (np.matmul(A.transpose(1,2,0),c[...,None]))[...,0]
    Out[142]: 
    array([[0.2, 0. , 0.8],
           [0. , 0.1, 0.9],
           [0.2, 0. , 0.8]])
    

    注意:在 Python 3.x 上,np.matmul 可以替换为 @ operator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-18
      • 2014-12-02
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      相关资源
      最近更新 更多