【发布时间】:2015-11-06 05:45:15
【问题描述】:
我一直在尝试找到一种快速算法来计算长度为 x 的 n 个向量之间的所有角度。例如,如果 x=3 和 n=4,我的数据将如下所示:
答:[1,2,3]
B:[2,3,4]
C:[...]
D:[...]
我想知道是否可以找到所有 be 向量 (A,B,C,D) 与某个固定向量 (即 X:[100,100,100,100]) 之间的角度,然后减去 ( A,B,C,D)相对于该固定值找到,以找到所有它们之间的角度。我想这样做是因为我只需要计算一次角度,然后我可以减去所有向量的角度来找到它们之间的差异。简而言之,我想知道做这个假设是否安全?
angle_between(A,B) == angle_between(A,X) - angle_between(B,X)
而angle_between函数是余弦相似度。
【问题讨论】:
-
用什么语言?您的首选语言可能有一个提供此功能的简单库,或者您可以轻松地将其向量化为您选择的语言。
-
我认为您的观点在二维情况下有效,但不适用于更高维度(例如,您的示例提供 3D 数据点):指向北方的向量(从地球中心)与指向赤道0经度的向量是90度,等于第一个向量和指向赤道90经度的向量的夹角。
-
既然我对我的angle_between函数使用余弦相似度度量,那么指向北的向量和指向南的向量之间的角度不是0吗?因为两个向量之间的夹角不能大于 90°。
-
我从来没有提到指向南方的向量;你这是什么意思?
-
在 3d 中,您需要 3 个固定的非共面(最好是正交)轴来执行此操作(例如 x、y 和 z 轴),因此您可以使用 3N 余弦构造所有角度,但关系并不简单我担心对于小 N 直接方法会更快
标签: python cosine-similarity trigonometry