首页 > 解决方案 > pytorch中的向量和矩阵行余弦相似度

问题描述

在 pytorch 中,我有多个(十万的规模)300 个暗向量(我认为我应该将它们上传到一个矩阵中),我想通过它们与另一个向量的余弦相似度对它们进行排序并提取前 1000 个向量。我想避免 for 循环,因为它很耗时。我一直在寻找一个有效的解决方案。

标签: pytorchcosine-similarity

解决方案


您可以使用torch.nn.functional.cosine_similarity函数来计算余弦相似度。和torch.argsort提取前 1000 个。

这是一个例子:

x = torch.rand(10000,300)
y = torch.rand(1,300)
dist = F.cosine_similarity(x,y)
index_sorted = torch.argsort(dist)
top_1000 = index_sorted[:1000]

请注意 的形状y,在调用相似函数之前不要忘记重塑。另请注意,argsort它只返回最近向量的索引。要自己访问这些向量,只需编写x[top_1000],这将返回一个形状为 的矩阵(1000,300)


推荐阅读