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

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

可以用 numpy matmul 完成吗?

4

1 回答 1

3

您可以在使用 -broadcasting扩展它们的尺寸后简单地使用np.newaxis/None-

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

这将是性能最高的,因为这里sum-reduction不需要保证来自np.einsumor的服务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)
于 2017-05-23T18:05:03.653 回答