多个外部产品的Numpy运营商

时间:2017-05-23 18:02:40

标签: python numpy tensor

import numpy as np
mat1 = np.random.rand(2,3)
mat2 = np.random.rand(2,5)

我希望获得一个2x3x5张量,其中每层是3x5外部产品,通过将3x1转置的mat1行乘以1x5行的mat2来实现。

可以用numpy matmul完成吗?

1 个答案:

答案 0 :(得分:1)

您可以在使用broadcasting -

扩展其尺寸后使用np.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)