如果这是一个幼稚的问题,请原谅我这样的测试代码:
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)
结果:
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])
问题是:
pytorch如何计算成对距离?是要计算行向量距离吗?
“自身”距离为何不为0?
更新
将list_1和list_2更改为此:
list_1 = [[1., 1.,1.,],[1., 1.,1.,]]
list_2 = [[1., 1.,1.,],[2., 1.,1.,]]
结果变为:
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])
答案 0 :(得分:1)
查看nn.PairWiseDistance
的文档,pytorch期望两个N
维的D
向量的2D张量,并计算N
对之间的距离。
为什么“自我”距离不为零-可能是由于floating point precision和eps = 1e-6
造成的。
答案 1 :(得分:0)
根据https://github.com/pytorch/pytorch/blob/master/torch/nn/functional.py
Computes the p-norm distance between every pair of row vectors in the input.