【问题标题】:Numpy operator for multiple outer products多个外部产品的 Numpy 运算符
【发布时间】:2017-05-23 18:02:40
【问题描述】:
import numpy as np
mat1 = np.random.rand(2,3)
mat2 = np.random.rand(2,5)

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

用numpy matmul可以做到吗?

【问题讨论】:

    标签: python numpy tensor


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-28
      • 2013-08-20
      • 2017-06-08
      • 2014-07-28
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      相关资源
      最近更新 更多