【问题标题】:Calculating the Angle Between Vectors by using a vector as a reference point:使用向量作为参考点计算向量之间的角度:
【发布时间】: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


【解决方案1】:

这种方法只适用于二维向量。对于更高维度,任何两个向量都将定义一个超平面,并且只有当第三个(参考)向量也位于该超平面内时,您的方法才会起作用。不幸的是,为了确定每对向量之间的角度,您必须计算它们中的所有 n choose 2,而不是只计算 n 角度和减法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2019-11-10
    • 2021-11-25
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多