import numpy as np
mat1 = np.random.rand(2,3)
mat2 = np.random.rand(2,5)
我希望获得一个2x3x5张量,其中每层是3x5外部产品,通过将3x1转置的mat1行乘以1x5行的mat2来实现。
可以用numpy matmul完成吗?
答案 0 :(得分:1)
您可以在使用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)