张量中仅一维的矩阵向量乘法

时间:2019-04-02 14:14:05

标签: pytorch

是否可以仅将张量中的一个(最后)维与其他向量相乘?

例如,假设张量T = [100,20,400],矩阵M = [400,400]。 是否可以进行h_{transpose}*M*h操作,其中h是张量T中的最后一个维?换句话说,是否有可能利用(可能是pytorch)内置函数来获得大小为[100,20,1]的结果张量?

1 个答案:

答案 0 :(得分:1)

我认为最简单(当然是最短)的解决方案是使用einsum

import torch

T = torch.randn(100, 20, 400)
M = torch.randn(400, 400)

res = torch.einsum('abc,cd,abd->ab', (T, M, T)).unsqueeze(-1)

它基本上说:“对于所有(a, b, c, d),将T[a, b, c]乘以M[c, d]T[a, b, d],然后将其累加到res[a, b]中。”

由于einsum是根据mmtranspose等基本构建块实现的,因此可以肯定地将其展开为更“经典”的解决方案,但是现在我的大脑无法正常工作我就是那个。