【问题标题】: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)

有没有更简单或更容易的方法来获得我想要的结果?

【问题讨论】:

    标签: pytorch tensor


    【解决方案1】:

    来吧

    dist = (tensor1 - tensor2).pow(2).sum(3).sqrt()
    

    基本上这就是欧几里得距离。

    减去 -> 2 的幂 -> 沿要消除的不幸轴求和 -> 平方根

    【讨论】:

      猜你喜欢
      • 2014-06-14
      • 2021-02-11
      • 2014-11-12
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多