计算python中两个向量(词袋)之间的欧氏距离

时间:2013-05-23 12:00:34

标签: python math vector

我使用字典来表示文章中的字数

例如{"name" : 2 , "your": 10, "me", 20}表示“name”出现两次,“your”出现10次,“me”出现20次。

那么,有没有一种很好的方法来计算这些向量的欧氏距离? 难点在于这些向量的长度不同,有些向量包含某些词,而有些则不包含。

我知道我确实可以编写一个很长的函数来做到这一点,只是寻找一种更简单,更聪明的方法。感谢

编辑: 目标是获得两篇文章之间的相似性并将它们分组

2 个答案:

答案 0 :(得分:8)

这样的东西
math.sqrt(sum((a[k] - b[k])**2 for k in a.keys()))

其中a和b是具有相同键的字典。如果你要在不同的矢量对之间比较这些值,那么你应该确保每个矢量包含完全相同的单词,否则你的距离测量将完全没有任何意义。

您可以仅根据交叉点计算距离:

math.sqrt(sum((a[k] - b[k])**2 for k in set(a.keys()).intersection(set(b.keys()))))

另一种选择是使用union并将未知值设置为0

math.sqrt(sum((a.get(k, 0) - b.get(k, 0))**2 for k in set(a.keys()).union(set(b.keys()))))

但是你必须仔细考虑你的计算实际是什么。

答案 1 :(得分:0)

您还可以在此链接中使用两个向量之间的余弦相似度: http://mines.humanoriented.com/classes/2010/fall/csci568/portfolio_exports/sphilip/cos.html