在python中计算两个向量(单词包)之间的欧几里德距离
我用字典来表示文章中的字数 例如在python中计算两个向量(单词包)之间的欧几里德距离,python,math,vector,Python,Math,Vector,我用字典来表示文章中的字数 例如{“name”:2,“your”:10,“me”,20}表示“name”出现两次,“your”出现10次,“me”出现20次 那么,有没有一个好的方法来计算这些向量的欧几里德距离? 困难在于这些向量的长度不同,有些向量包含某些单词,而有些则不包含 我知道我肯定可以编写一个长函数来实现这一点,只要寻找一种更简单、更聪明的方法。谢谢 编辑: 目的是获得两篇文章之间的相似性,并将它们分组 math.sqrt(sum((a[k] - b[k])**2 for k in a
{“name”:2,“your”:10,“me”,20}
表示“name”出现两次,“your”出现10次,“me”出现20次
那么,有没有一个好的方法来计算这些向量的欧几里德距离?
困难在于这些向量的长度不同,有些向量包含某些单词,而有些则不包含
我知道我肯定可以编写一个长函数来实现这一点,只要寻找一种更简单、更聪明的方法。谢谢
编辑:
目的是获得两篇文章之间的相似性,并将它们分组
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()))))
但您必须仔细考虑您正在计算的实际情况。您也可以使用两个向量之间的余弦相似性,如下链接所示:
这对您有帮助吗?它使用
counter.counter()
,这是bag数据结构的Python实现。只有当两个向量长度相同(即映射相同的单词)且顺序相同时,才能执行此操作。您可以计算交叉点上的欧几里德距离。无论如何,这是一个任意的选择。如果你准确地告诉我们你的目标,我们可能会帮助你设计一个好的距离函数来实现你的目标。问题是,计算不同维度数据的欧几里德距离有多大意义。向量x=(x1,x2)
是二维的,因此在欧几里得距离方面可与向量y=(y1,y2)
进行比较。但是从这个意义上讲,你如何将'x'与向量z=(z1,z2,z3,z4,z5)相比较呢?