当前位置:   article > 正文

pytorch 快速计算两个tensor的欧式距离_torch计算两个向量对应位置的欧氏距离

torch计算两个向量对应位置的欧氏距离

给定两个tensor: A 和 B。A的维度为 [m,h],  B的维度为 [n,h]。要求每两行之间计算他们的欧氏距离,返回一个维度为[m,n]的tensor。要求不能使用循环,也不能扩充复制一个tensor。

解:将欧式距离的公式展开,根号下面是a2+b22ab。a是tensor A中某一行的平方和,b是tensor B中某一行的平方和,ab是两个向量的内积。

所以代码为:

  1. def EuclideanDistances(a,b):
  2. sq_a = a**2
  3. sum_sq_a = torch.sum(sq_a,dim=1).unsqueeze(1) # m->[m, 1]
  4. sq_b = b**2
  5. sum_sq_b = torch.sum(sq_b,dim=1).unsqueeze(0) # n->[1, n]
  6. bt = b.t()
  7. return torch.sqrt(sum_sq_a+sum_sq_b-2*a.mm(bt))
  8. a = torch.rand(3,5)
  9. b = torch.rand(4,5)
  10. print(EuclideanDistances(a,b))

 

解释:其中问题关键就在于[m,1 ]+[1, n] 变成了一个[m,  n]

 

例如:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/396502?site
推荐阅读
相关标签
  

闽ICP备14008679号