如何有效地逐列乘两个矩阵

时间:2017-06-27 15:21:47

标签: 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.]

也就是说,给定矩阵AB,我希望将A的第一行乘以B的第一列,然后是第二,第三列,... 换句话说,假设两个矩阵:

A                                    B
[ a11, a12                      [ b11, b12
  a21, a22 ]                      b21, b22 ]

我想要的是

[ a11 * b11 + a12 * b21, a21 * b12 + a22 * b22 ]

我知道我的实施很慢。有没有什么方法可以快速实现? 谢谢大家的帮助!!!

2 个答案:

答案 0 :(得分:1)

使用B.T转置B并将AB元素相乘。

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

答案 1 :(得分: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])