Python 如何高效地将两个矩阵逐行相乘

Python 如何高效地将两个矩阵逐行相乘,python,numpy,matrix,Python,Numpy,Matrix,我使用以下玩具示例来说明我的问题: A = np.ones((3,2)) B = np.ones((2,3)) res = np.zeros(3,) for i in range(0,3): res[i] = A[i,:].dot(B[:,i]) print res 打印结果为 [ 2. 2. 2.] 也就是说,给矩阵A和B,我希望做的是将A的第一行与B的第一列相乘,然后是第二、第三。。。 换句话说,假设两个矩阵: A

我使用以下玩具示例来说明我的问题:

A = np.ones((3,2))
B = np.ones((2,3))
res = np.zeros(3,)

for i in range(0,3):
    res[i] = A[i,:].dot(B[:,i])
print res
打印结果为

[ 2.  2.  2.]
也就是说,给矩阵
A
B
,我希望做的是将
A
的第一行与
B
的第一列相乘,然后是第二、第三。。。 换句话说,假设两个矩阵:

A                                    B
[ a11, a12                      [ b11, b12
  a21, a22 ]                      b21, b22 ]
我想要的是

[ a11 * b11 + a12 * b21, a21 * b12 + a22 * b22 ]
我知道我的实现相当缓慢。有什么方法可以快速实现这一点吗?
谢谢大家帮助我

使用
B.T
转置
B
并按元素相乘
A
B

C = A*B.T
C = np.sum(C, axis=1)

使用
B.T
转置
B
并按元素相乘
A
B

C = A*B.T
C = np.sum(C, axis=1)

您还可以使用
np.einsum

np.einsum("ij,ji->i" , A, B)
# array([ 2.,  2.,  2.])
另一个例子:

A = np.array([[1,3],[4,5]])
B = np.array([[3,2],[1,1]])

A
#array([[1, 3],
#       [4, 5]])

B
#array([[3, 2],
#       [1, 1]])

np.einsum("ij,ji->i" , A, B)
# array([ 6, 13])

您还可以使用
np.einsum

np.einsum("ij,ji->i" , A, B)
# array([ 2.,  2.,  2.])
另一个例子:

A = np.array([[1,3],[4,5]])
B = np.array([[3,2],[1,1]])

A
#array([[1, 3],
#       [4, 5]])

B
#array([[3, 2],
#       [1, 1]])

np.einsum("ij,ji->i" , A, B)
# array([ 6, 13])