#pytorch #tensor
Вопрос:
Существует случайный инициализированный тензор факела формы, как показано ниже.
Входные
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)
Есть ли более простой или легкий способ получить желаемый результат?
Ответ №1:
Поехали
dist = (tensor1 - tensor2).pow(2).sum(3).sqrt()
В принципе, это и есть евклидово расстояние.
Вычтите -> мощность на 2 ->> сумма вдоль неудачной оси, которую вы хотите устранить->>> квадратный корень