计算张量中每对向量的欧氏距离

问题描述 投票:0回答:1

我有一个大小为 (4000000,3,90) 的张量,400 万行,3 列,每个单元格中有一个 90 的暗向量。

我想计算一行中每两个向量的欧几里德距离并将距离保存在距离矩阵中。目标是知道哪 2 个向量最接近。

我正在使用

PyTorch
,我想知道什么是最有效的方法/最佳实践。

编辑:

不一定是欧几里得范数,也可以是点积

我的想法: 我考虑过计算每一对的范数,例如,对于 V2 、 V3 之间的距离,将其放在第一列中,将 V1、V3 放在第二列中,依此类推。然后取所有的

min()
一行的条目知道哪个向量最远。我想知道是否有一种有效/内置的 pytroch 方法来做到这一点,或者我应该只做一个 for 循环

提前致谢!

python deep-learning pytorch tensor
1个回答
0
投票

要计算欧几里得(或 2-范数),您只需使用

torch.linalg.vector_norm()
。您提供应计算范数的维度(在您的情况下
dim = 2
),其他维度将自动视为批量维度。

假设你的张量被称为

data
:

norm = tor.linalg.vector_norm(data, dim = 2)

您可以提供不同的算法来计算范数,但

torch.linalg.vector_norm()
的默认值是 2-范数。

© www.soinside.com 2019 - 2024. All rights reserved.