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])