2017-05-23 40 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)