2016-06-10 229 views
2

假設我有一個形狀(m,n,n)和維數爲(m,n)的矢量C的ndarray。我需要用以下方法乘以這兩個:Numpy 3D陣列矩陣乘法函數

result = np.empty(m,n) 
for i in range(m): 
    result[i] = W[i] @ C[i] 

如何以矢量化的方式執行此操作,而無需循環和全部?

回答

1

因爲,你需要保持來自WC第一軸一致,從他們與矩陣乘法失去最後的軸做的,我會建議使用np.einsum一個非常有效的方法,像這樣 -

np.einsum('ijk,ik->ij',W,C

np.tensordotnp.dot沒有保持軸對齊的功能,這是np.einsum改進之處。

0

它使用np.tensordot

ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)] 
assert np.all(result==ans)