假設我有一個形狀(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]
如何以矢量化的方式執行此操作,而無需循環和全部?
假設我有一個形狀(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]
如何以矢量化的方式執行此操作,而無需循環和全部?
因爲,你需要保持來自W
和C
第一軸一致,從他們與矩陣乘法失去最後的軸做的,我會建議使用np.einsum
一個非常有效的方法,像這樣 -
np.einsum('ijk,ik->ij',W,C
)
np.tensordot
或np.dot
沒有保持軸對齊的功能,這是np.einsum
改進之處。
它使用np.tensordot
ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)]
assert np.all(result==ans)