【问题标题】:Numpy: Multiplying a matrix with a 3d tensor -- SuggestionNumpy:将矩阵与 3d 张量相乘——建议
【发布时间】:2011-05-28 07:38:29
【问题描述】:

我有一个形状为MxN 的矩阵P 和一个形状为KxNxR 的3d 张量T。我想将P 与T 中的每个NxR 矩阵相乘,得到KxMxR 3d 张量。

P.dot(T).transpose(1,0,2) 给出了想要的结果。有没有更好的 解决方案(即摆脱transpose)来解决这个问题?这一定是一个很常见的操作,所以我假设,其他人已经找到了不同的方法,例如使用tensordot(我尝试过但未能获得预期的结果)。意见/意见将不胜感激!

【问题讨论】:

    标签: python matrix numpy scipy linear-algebra


    【解决方案1】:

    您也可以使用爱因斯坦求和符号:

    P = numpy.random.randint(1,10,(5,3))
    P.shape
    T = numpy.random.randint(1,10,(2,3,4))
    T.shape
    
    numpy.einsum('ij,kjl->kil',P,T)
    

    这应该给你相同的结果:

    P.dot(T).transpose(1,0,2)
    

    【讨论】:

      【解决方案2】:
      scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
      

      【讨论】:

      • 哈!昨天我盯着scipy.tensordot(P, T, axes=[1,1]) 的结果看了几个小时,对交换的维度感到绝望。不知道swapaxes,谢谢!
      • 不客气。我还检查了交换轴是否给出了正确的数字答案,并且确实如此。
      猜你喜欢
      • 1970-01-01
      • 2015-01-24
      • 2016-12-11
      • 2021-06-06
      • 2022-06-30
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多