Функция pdist
Функция pdist вычисляет попарные расстояния между строками входного тензора. Первым параметром функция принимает тензор размерности (N, M), где N - количество точек, а M - размерность пространства. Вторым параметром можно передать норму p для вычисления расстояния Минковского. По умолчанию используется евклидово расстояние (p=2). Результатом является одномерный тензор длины N * (N - 1) / 2, содержащий все попарные расстояния в порядке (0, 1), (0, 2), ..., (0, N-1), (1, 2), ..., (N-2, N-1).
Синтаксис
torch.pdist(input, p=2)
Параметры
input - тензор размерности (N, M), где N - количество точек, M - размерность пространства.
p - норма расстояния Минковского. По умолчанию равна 2 (евклидово расстояние). Значение должно быть больше или равно 1.
Пример
Давайте вычислим попарные евклидовы расстояния между тремя точками в двумерном пространстве:
import torch
t = torch.tensor([
[0.0, 0.0],
[3.0, 4.0],
[1.0, 1.0],
])
res = torch.pdist(t)
print(res)
Результат выполнения кода:
tensor([5.0000, 1.4142, 3.6056])
Получены расстояния: между точкой 0 и 1 - 5.0, между точкой 0 и 2 - 1.4142, между точкой 1 и 2 - 3.6056.
Пример
Давайте вычислим попарные расстояния с нормой Минковского p=1 (манхэттенское расстояние):
import torch
t = torch.tensor([
[0.0, 0.0],
[3.0, 4.0],
[1.0, 1.0],
])
res = torch.pdist(t, p=1)
print(res)
Результат выполнения кода:
tensor([7.0000, 2.0000, 5.0000])
Манхэттенские расстояния между точками: между точкой 0 и 1 - 7.0, между точкой 0 и 2 - 2.0, между точкой 1 и 2 - 5.0.
Пример
Давайте вычислим попарные расстояния между четырьмя точками в трёхмерном пространстве:
import torch
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0],
[2.0, 3.0, 4.0],
])
res = torch.pdist(t)
print(res)
print(res.shape)
Результат выполнения кода:
tensor([5.1962, 10.3923, 1.7321, 5.1962, 5.1962, 8.6603])
torch.Size([6])
Для 4 точек получено 6 попарных расстояний: 4 * (4 - 1) / 2 = 6.
Пример
Давайте используем pdist с параметром p=3 для вычисления расстояния Минковского третьего порядка:
import torch
t = torch.tensor([
[0.0, 0.0, 0.0],
[2.0, 2.0, 2.0],
[1.0, 1.0, 1.0],
])
res = torch.pdist(t, p=3)
print(res)
Результат выполнения кода:
tensor([3.6342, 1.4422, 2.2894])
Смотрите также
-
функцию
pairwise_distance,
которая вычисляет попарные расстояния между векторами двух тензоров -
функцию
cosine_similarity,
которая вычисляет косинусное сходство между векторами -
функцию
normalize,
которая выполняет нормализацию тензора по заданной размерности -
функцию
mse_loss,
которая вычисляет среднеквадратичную ошибку между тензорами