Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中计算两个向量(单词包)之间的欧几里德距离_Python_Math_Vector - Fatal编程技术网

在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)相比较呢?