2017-07-19 20 views
1

說我有:更換循環,在軸與廣播

a = np.array([[2, 4], 
       [6, 8]])  
b = np.array([[1, 3], 
       [1, 5]]) 

我想要去:

c = np.array([[20,32], 
       [28, 44]]) 

其中cba每一列相乘的結果,那麼將沿第一軸的結果相加。

即:

print(np.sum(a[:, 0] * b, axis=1)) 
[20 32] 

print(np.sum(a[:, 1] * b, axis=1)) 
[28 44] 

我可以通過廣播做,而不是:使用

  • np.apply_along_axis
  • 通過每列循環?

回答

4

您可以使用np.dot -

b.dot(a).T 

另外,使用np.einsum(用於也許踢) -

np.einsum('ij,ki->jk',a,b) 
+1

1+,比賽。 –

+0

對於更小的陣列,'einsum'會更慢,更大的會更快? –

+0

@BradSolomon如果沒有座標軸對齊的要求,我會認爲當你增加減少的數量,即使用大型數組時,'np.dot'會更好。 – Divakar