Получите евклидово и бесконечное расстояние в Pytorch - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь получить Евклидово расстояние в Pytorch, используя torch.dist, как показано ниже:

torch.dist(vector1, vector2, 1)

Если я использую «1» в качестве третьего параметра, я получаю Манхэттенрасстояние, и результат правильный, но я пытаюсь получить евклидово и бесконечное расстояния, а результат не правильный.Я пытался использовать много разных чисел для третьего параметра, но я не смог получить желаемые расстояния.

Как я могу получить евклидово и бесконечное расстояния, используя Pytorch?

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Вы должны использовать .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() возвращает правильный ответ.

0 голосов
/ 12 мая 2019

Евклидово расстояние - это норма L2: torch.dist(vector1, vector2, 2)
Норма безразличия: torch.dist(vector1, vector2, float("inf"))

...