【问题标题】:Calculate distance between two vectors of different length计算两个不同长度的向量之间的距离
【发布时间】:2012-02-16 16:01:48
【问题描述】:

有不同的方法来计算两个相同长度的向量之间的距离:欧几里得、曼哈顿、汉明……

我想知道有什么方法可以计算不同长度的向量之间的距离。

【问题讨论】:

  • 你的向量包含什么? (位,浮动,...)?你不能用 0 填充它们并应用相同长度的向量距离之一吗?
  • @Scharron,我认为您将向量的维度与向量的长度(范数)混淆了。 OP 没有提到一个向量中的分量数与另一个向量中的分量数不同的任何地方。
  • @ardnew 你在纯数学方面是对的。但是问题的表达方式,我假设他谈到了“计算机科学”长度,即向量中元素的数量。否则,他计算不同长度向量的距离就没有问题了。
  • 正如你所说,我的意思是元素数量不同的向量,
  • 有没有办法将它们标准化为相同数量的元素?

标签: vector distance


【解决方案1】:

欧几里得距离公式求欧几里得空间中任意两点之间的距离。

欧几里得空间中的一个点也称为欧几里得向量。

您可以使用欧几里得距离公式来计算两个不同长度的向量之间的距离。

对于不同维度的向量,同样的原则适用。

假设一个低维向量也存在于高维空间中。然后,您可以将低维向量中的所有缺失分量设置为 0,以便两个向量具有相同的维度。然后,您将使用任何提到的距离公式来计算距离。

例如,考虑在 中包含(a1,a2) 的二维向量A,以及在 中包含(b1,b2,b3) 的3 维向量B

要在 中表达A,您可以将其组件设置为(a1,a2,0)。然后,使用公式可以找到AB之间的欧几里得距离d

d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)²

d = sqrt((b1 - a1)² + (b2 - a2)² + b3²)

对于您的特定情况,组件将是 01,因此所有差异将是 -101。那么平方差将只有01

如果您使用整数或单个位来表示组件,则可以使用简单的按位运算而不是一些算术(^ 表示 XORexclusive or):

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) ^ a(n-1) + b(n) ^ a(n))

我们假设A 的尾随部分是0,所以最终公式为:

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) + b(n))

【讨论】:

  • 一开始是有道理的。但是现在想了想,将缺失维度的缺失值设置为零,如果使用欧几里得计算指纹匹配进行定位,可能会出现问题。在您的示例中...假设向量 A 包含 (0,0) 并且向量 B 包含 (0,0,0) 并且向量 C 包含 (0,0,0),而不是欧几里得将导致距离计算零,对于两个距离。但 A 离 B 远,就像 C 一样。
  • @JacksOnF1re 我不确定我是否遵循。在您的示例中,为什么从 A 到 B 的距离与从 B 到 C 的距离不同?
  • 我的解释有点差。我的意思是,如果你用欧几里得计算距离,A 和 B 之间的距离与 B 和 C 之间的距离相同。但这就是问题所在!由于缺少维度,A 到 B 应该返回更高的距离。如果涉及到本地化计算,这可能会导致问题(我猜)。数学上正确,但对编程问题的用处有限。对不起我的英语。
【解决方案2】:

您不能直接计算不同长度的向量之间的距离。

这里的所有建议都以一个函数开始,该函数将较短长度的向量映射到较高长度的向量,然后照常进行计算。

有很多很多的功能(实际上是无限多)可以使用:

  • 用零填充。这是最容易做的事情。比如说,如果您有一辆车并且需要计算它与飞机的距离,这会将汽车置于海平面。
  • 在某处查找缺失值。以汽车-飞机为例,您可以启动地理数据库并根据经度/纬度查找高度。
  • 使用一些数学函数。

由于距离计算的结果很大程度上取决于将较短向量转换为较长向量的函数,所以每个人都需要清楚使用什么函数。要么是因为该领域的每个人都同意只有一个函数有意义,要么是因为转换中使用的函数被记录下来了。

【讨论】:

  • 很好的比喻,很好的观点。归一化函数(应用于两个向量)绝对支持计算距离的含义
【解决方案3】:

您可以尝试计算维度为 n 和 m (n ~= m) 的两个向量 p 和 q 之间的平均最小距离:

d = 1/n * sum_i=1:n ( min_j=1:m (p(i) - q(j))) + 1/m * sum_j=1:m (min_i=1:n (p(i) - q(j)))

【讨论】:

    【解决方案4】:

    用零填充短数组以使其具有与长数组相同的长度的想法似乎“通常”不是一个正确的想法。

    例如,如果我们对同一参数(例如温度、速度或作为开/关开关状态的二进制参数)在不同的时刻进行两组测量(数组、向量...) .假设第一组A1由在一组时刻T1进行的N次测量组成,而第二组A2由在一组时刻T2进行的M次测量(M=N)组成。

    请注意,T2 的分布与 T1 的分布任意不同。因此,这里用零填充没有意义。

    在这种情况下,我建议通过使用一组常见的时间瞬间来使用插值,例如 T 如下:

    A1_new = 插值 (T1, A1, T);

    A2_new = 插值 (T2, A2, T);

    其中 interpolate(x,y,xq) 接受输入作为变量 x、函数 y(x) 和查询点 xq。 'interpolate' 函数返回插值后的输出 y(xq)。

    现在,我们可以通过任何合适的度量来比较相同大小的集合 A1_new 和 A2_new,例如欧几里得距离。

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 2019-05-29
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多