2017-06-27 65 views
0

我用下面的玩具例子來說明我的問題:如何有效地乘兩個矩陣行通過

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 ] 

我知道我的實現是相當緩慢。有什麼方法可以快速實施嗎? 謝謝大家的幫助!

回答

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

使用B.T轉置B並以元素方式乘以AB

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