计算多维火炬张量中向量之间的欧几里得距离

Posted

技术标签:

【中文标题】计算多维火炬张量中向量之间的欧几里得距离【英文标题】:To calculate euclidean distance between vectors in a torch tensor with multiple dimensions 【发布时间】:2021-09-14 03:05:39 【问题描述】:

有一个随机初始化的火炬张量,形状如下。

输入

tensor1 = torch.rand((4,2,3,100))
tensor2 = torch.rand((4,2,3,100))

tensor1tensor2 分别是具有 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 的幂 -> 沿要消除的不幸轴求和 -> 平方根

【讨论】:

以上是关于计算多维火炬张量中向量之间的欧几里得距离的主要内容,如果未能解决你的问题,请参考以下文章

Python中的多维欧几里得距离

欧几里得距离

计算数组中向量之间的最大距离

两个坐标列表的欧几里得距离矩阵

计算没有上溢或下溢的 3D 欧几里得距离

如何在opencv中找到单个图像的关键点之间的欧几里得距离