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

Won*_*hin 8 pytorch tensor

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

输入

tensor1 = torch.rand((4,2,3,100))
tensor2 = torch.rand((4,2,3,100))
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*oen 16

给你

dist = (tensor1 - tensor2).pow(2).sum(3).sqrt()
Run Code Online (Sandbox Code Playgroud)

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

减去 -> 乘以 2 -> 沿着你想要消除的不幸轴求和 -> 平方根