我正尝试使用torch.dist来获取皮托赫的欧几里得距离,如下所示:
torch.dist(vector1, vector2, 1)
如果我将“ 1”用作第三个参数,则得到的是曼哈顿距离,而结果是正确的,但是我试图获得的是欧几里得距离和无限距离,结果不正确。我在第三个参数上尝试了很多不同的数字,但无法获得所需的距离。
如何使用Pytorch获得欧几里得距离和无限距离?
答案 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.)