通过在Python中对矩阵进行加权来按行组合矩阵

通过在Python中对矩阵进行加权来按行组合矩阵,python,numpy,matrix,Python,Numpy,Matrix,我有维度为RxR的N矩阵和维度为RxN的一个“权重矩阵”。 现在我想通过使用“权重矩阵”对这些N矩阵进行加权,将它们按行组合起来。最后我想要一个RxR矩阵 让我给你举个例子: 在下面的例子中,我的初始矩阵是a和b,权重矩阵是c。所需的输出是矩阵r R的第一行是A的第一行,因为C[0,0]是1,C[0,1]是0,所以我们只考虑矩阵A. < /P>的第一行。 r的第二行是矩阵a和b的第2行的加权平均值(因为c[1,0]=0.5和c[1,1]=0.5) R的第三行是B的第三行,因为C[2,0]是0

我有维度为RxRN矩阵和维度为RxN的一个“权重矩阵”。 现在我想通过使用“权重矩阵”对这些N矩阵进行加权,将它们按行组合起来。最后我想要一个RxR矩阵

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

R的第一行是A的第一行,因为C[0,0]是1,C[0,1]是0,所以我们只考虑矩阵A. < /P>的第一行。 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. < /P>的第三行。

我如何在Python中做到这一点(最好使用numpy函数)?

我们可以使用-

或者使用
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]])
注意:在Python3.x上,
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]])