首页 > 解决方案 > 使用 Pytorch 的矩阵形式的洛伦兹内积

问题描述

我想计算洛伦兹内积,即 <x,y> = -x1y1 + x2y2 + x3y3 +... 我有代码

 res = torch.sum(x * y, dim=-1) - 2 * x[..., 0] * y[..., 0]

但这不起作用,因为我不断收到此错误 - RuntimeError:张量 a (450) 的大小必须与非单维 0 处的张量 b (30) 的大小相匹配

我需要矩阵形式的内积。所以我做了这个 -

 res = torch.matmul(x,torch.transpose(y,0,1))
-2*torch.matmul(x[...,0],torch.transpose(y[...,0],0,0))

但是我得到一个新的错误 RuntimeError:张量大小不一致,预期张量 [450] 和 src [30] 具有相同数量的元素,但分别得到 450 和 30 个元素。

我在一个简单的玩具例子上试过这个 -

x = torch.tensor([[1, 2, 3]])
y = torch.tensor([[2, 2, 2]])
prod = torch.matmul(x,torch.transpose(y,0,1))-2*torch.matmul(x[...,0],torch.transpose(y[...,0],0,0))
print(prod)

输出: tensor([[8]]) 是正确的。但不知何故,在我正在处理的应用程序中似乎不起作用。

我不知道如何解决这个问题。欢迎任何见解!

标签: pythonnumpypytorchmatrix-multiplication

解决方案


所以我做了这个 -

import torch
x = torch.tensor([[1, 2, 3]])
y = torch.tensor([[2, 2, 2]])
x[...,0] *= -1
res = torch.matmul(x,torch.transpose(y,0,1))
print (res)

它开始为我的应用程序工作。


推荐阅读