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完成吗?
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完成吗?
您可以简单地使用broadcasting
与np.newaxis/None
延长它们的尺寸之后 -
mat1[...,None]*mat2[:,None]
这将是最高效的,因为没有sum-reduction
这里需要从np.einsum
或np.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)