有一个随机初始化的火炬张量,其形状如下。
输入
tensor1 = torch.rand((4,2,3,100))
tensor2 = torch.rand((4,2,3,100))
tensor1
和 tensor2
分别是具有 24 个 100 维向量的火炬张量。
我想通过获得两个张量具有相同索引的向量之间的欧几里得距离来获得形状为
torch.size([4,2,3])
的张量。
我用
dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)
得到了我想要的结果。
但是,
pairwise_distance
函数计算张量第二维的欧氏距离。所以 dist
形状是 torch.size([4,3,100])
。
我已经执行了多次转置来解决这些问题。我的代码如下。
tensor1 = tensor1.transpose(1,3)
tensor2 = tensor2.transpose(1,3)
dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)
dist = dist.transpose(1,2)
有没有更简单或更容易的方法来获得我想要的结果?
给你
dist = (tensor1 - tensor2).pow(2).sum(3).sqrt()
基本上这就是欧几里得距离。
减去 -> 乘以 2 -> 沿着你想要消除的不幸轴求和 -> 平方根
使用 pytorch 进行所有操作(可能会产生更快的解决方案):
distance = torch.sqrt(torch.sum((tensor_1 - tensor_2) ** 2, dim=0))