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

Bea*_*ear 4 python math vector

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

例如,{"name" : 2 , "your": 10, "me", 20}为了表示"name"出现两次,"your"出现10次,"me"出现20次.

那么,有没有一种很好的方法来计算这些向量的欧氏距离?困难在于这些矢量具有不同的长度,并且一些矢量包含某些单词而一些不包含.

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

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

Blu*_*ber 8

就像是

math.sqrt(sum((a[k] - b[k])**2 for k in a.keys()))
Run Code Online (Sandbox Code Playgroud)

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

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

math.sqrt(sum((a[k] - b[k])**2 for k in set(a.keys()).intersection(set(b.keys()))))
Run Code Online (Sandbox Code Playgroud)

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

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

但是你必须仔细考虑你在计算的实际情况.