pytorch 计算多维torchTensor中向量间的欧氏距离

x33g5p2x  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(242)

有一个随机初始化的 Torch Tensor的形状如下。

投入

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

tensor1tensor2分别是具有24个100维向量的 Torch Tensor。
我想得到一个形状为torch.size([4,2,3])的Tensor,通过获得两个Tensor具有相同索引的向量之间的欧几里得距离。
我使用dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)来获得我想要的结果。
然而,pairwise_distance函数计算Tensor的第二维的欧几里得距离。所以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)

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

zd287kbt

zd287kbt1#

给你

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

基本上这就是欧几里得距离。
减去-> 2的幂->沿着你想消除的不幸的轴沿着->平方根

q1qsirdb

q1qsirdb2#

使用pytorch进行所有操作(可能会产生更快的解决方案):

distance = torch.sqrt(torch.sum(torch.pow(torch.subtract(a, b), 2), dim=0))

相关问题