在Pytorch中获取欧几里得和无限距离

时间:2019-05-11 19:47:55

标签: python pytorch distance

我正尝试使用torch.dist来获取皮托赫的欧几里得距离,如下所示:

torch.dist(vector1, vector2, 1)

如果我将“ 1”用作第三个参数,则得到的是曼哈顿距离,而结果是正确的,但是我试图获得的是欧几里得距离和无限距离,结果不正确。我在第三个参数上尝试了很多不同的数字,但无法获得所需的距离。

如何使用Pytorch获得欧几里得距离和无限距离?

3 个答案:

答案 0 :(得分:2)

您应该使用.norm()而不是.dist()

vector1 = torch.FloatTensor([3, 4, 5])
vector2 = torch.FloatTensor([1, 1, 1])

dist = torch.norm(vector1 - vector2, 1)
print(dist) # tensor(9.)
dist = torch.norm(vector1 - vector2, 2)
print(dist) # tensor(5.3852)
dist = torch.norm(vector1 - vector2, float("inf"))
print(dist) # tensor(4.)

dist = torch.dist(vector1, vector2, 1)
print(dist) # tensor(9.)
dist = torch.dist(vector1, vector2, 2)
print(dist) # tensor(5.3852)
dist = torch.dist(vector1, vector2, float("inf"))
print(dist) # tensor(1.)

正如我们看到的无穷远距离,.norm()返回正确的答案。

答案 1 :(得分:0)

欧几里得距离是L2范数:torch.dist(vector1, vector2, 2)
Inifnity规范:torch.dist(vector1, vector2, float("inf"))

答案 2 :(得分:0)

torch.norm 现在已弃用,建议改用 torch.linalg.norm()。文档可以在 here 中找到。

欧几里得距离和无穷远距离可以用

计算
vector1 = torch.FloatTensor([3, 4, 5])
vector2 = torch.FloatTensor([1, 1, 1])
dist_euclidian = torch.linalg.norm(vector1 - vector2)  # tensor(5.3852)
dist_infinity = torch.linalg.norm(vector1 - vector2, float("inf"))  # tensor(4.)