Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does pytorch calculate matrix pairwise distance? Why isn't 'self' distance not zero?

If this is a naive question, please forgive me, my test code like this:

import torch
from torch.nn.modules.distance import PairwiseDistance

list_1 = [[1., 1.,],[1., 1.]]
list_2 = [[1., 1.,],[2., 1.]]

mtrxA=torch.tensor(list_1)
mtrxB=torch.tensor(list_2)

print "A-B distance     :",PairwiseDistance(2).forward(mtrxA, mtrxB)
print "A 'self' distance:",PairwiseDistance(2).forward(mtrxA, mtrxA)
print "B 'self' distance:",PairwiseDistance(2).forward(mtrxB, mtrxB)

Result:

A-B distance     : tensor([1.4142e-06, 1.0000e+00])
A 'self' distance: tensor([1.4142e-06, 1.4142e-06])
B 'self' distance: tensor([1.4142e-06, 1.4142e-06])

Questions are:

  1. How does pytorch calculate pairwise distance? Is it to calculate row vectors distance?

  2. Why isn't 'self' distance 0?


Update

After changing list_1 and list_2 to this:

list_1 = [[1., 1.,1.,],[1., 1.,1.,]]
list_2 = [[1., 1.,1.,],[2., 1.,1.,]]

Result becomes:

A-B distance     : tensor([1.7321e-06, 1.0000e+00])
A 'self' distance: tensor([1.7321e-06, 1.7321e-06])
B 'self' distance: tensor([1.7321e-06, 1.7321e-06])
like image 534
Alex Luya Avatar asked Dec 04 '18 07:12

Alex Luya


Video Answer


1 Answers

Looking at the documentation of nn.PairWiseDistance, pytorch expects two 2D tensors of N vectors in D dimensions, and computes the distances between the N pairs.

Why "self" distance is not zero - probably because of floating point precision and because of eps = 1e-6.

like image 174
Shai Avatar answered Oct 23 '22 18:10

Shai