2017-05-23 78 views
1
import numpy as np 
mat1 = np.random.rand(2,3) 
mat2 = np.random.rand(2,5) 

我希望得到一個2x3x5張量,其中每層是3x1轉置行mat1乘以1x5行mat2實現的3x5外層產品。Numpy運營商多個外部產品

它可以用numpy matmul完成嗎?

回答

1

您可以簡單地使用broadcastingnp.newaxis/None延長它們的尺寸之後 -

mat1[...,None]*mat2[:,None] 

這將是最高效的,因爲沒有sum-reduction這裏需要從np.einsumnp.matmul保證服務。

如果你仍然想在np.matmul拖累,這將是作爲與broadcasting一個基本相同:

np.matmul(mat1[...,None],mat2[:,None]) 

隨着np.einsum,它可能看起來更整潔一點比別人,如果你熟悉其字符串符號 -

np.einsum('ij,ik->ijk',mat1,mat2) 
#   23,25->235 (to explain einsum's string notation using axes lens)