计算两个相同长度向量之间的距离有不同的方法:欧几里得、曼哈顿、汉明......
我想知道有什么方法可以计算不同长度的向量之间的距离。
欧几里德距离公式可计算欧几里德空间中任意两点之间的距离。
欧几里德空间中的点也称为欧几里德向量。
可以使用欧氏距离公式计算两个不同长度的向量之间的距离。
对于不同维度的向量,同样的原理适用。
假设高维空间中也存在一个低维向量。然后,您可以将较低维度向量中的所有缺失分量设置为 0,以便两个向量具有相同的维度。然后,您可以使用任何提到的距离公式来计算距离。
例如,考虑
A
中的 2 维向量 R²
,其分量为 (a1,a2)
,以及 B
中的 3 维向量 R³
,其分量为 (b1,b2,b3)
。
要在
A
中表达 R³
,您可以将其组件设置为 (a1,a2,0)
。然后,可以使用以下公式找到 d
和 A
之间的欧氏距离 B
:
d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)²
d = sqrt((b1 - a1)² + (b2 - a2)² + b3²)
对于您的特定情况,组件将为
0
或 1
,因此所有差异将为 -1
、0
或 1
。平方差将仅为 0
或 1
。
如果您使用整数或单个位来表示分量,则可以使用简单的按位运算而不是一些算术(
^
表示XOR
或exclusive 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))
您无法直接计算不同元素数量(“长度”、“维度”)的向量之间的距离。
这里的所有建议都从一个将较低长度向量映射到较高长度向量的函数开始,然后正常进行计算。
可以使用的功能有很多很多(事实上是无限多):
由于距离计算的结果很大程度上取决于将较短向量转换为较长向量的函数,因此每个人都需要清楚使用什么函数。要么是因为该领域的每个人都同意只有一个函数有意义,要么是因为转换中使用的函数已明确说明。
您可以尝试计算维度为 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)))
用零填充短数组以使其具有与长数组相同的长度的想法“通常”似乎不是一个正确的想法。
例如,如果我们在不同时刻对同一参数(例如温度、速度或作为开/关开关状态的二进制参数)进行两组(数组、向量……)测量。假设第一组A1由在一组时刻T1进行的N个测量组成,而第二组A2由在一组时刻T2进行的M个测量(M=N)组成。
请注意,T2 的分布与 T1 的分布任意不同。因此,这里用零填充没有意义。
在这种情况下,我建议通过使用一组通用的时刻来使用插值,如下所示:
A1_new = 插值 (T1, A1, T);
A2_new = 插值 (T2, A2, T);
其中 interpolate(x,y,xq) 接受输入作为变量 x、函数 y(x) 和查询点 xq。 “插值”函数返回插值输出 y(xq)。
现在,我们可以通过任何合适的度量来比较相同大小的集合 A1_new 和 A2_new,例如欧几里得距离。