计算两个相同长度向量之间的距离有不同的方法:欧几里得、曼哈顿、汉明 ...
我想知道是否有一种方法可以计算不同长度向量之间的距离。
计算两个相同长度向量之间的距离有不同的方法:欧几里得、曼哈顿、汉明 ...
我想知道是否有一种方法可以计算不同长度向量之间的距离。
d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)²
d = sqrt((b1 - a1)² + (b2 - a2)² + b3²)
对于您的特殊情况,组件将是0
或1
,因此所有差异将为-1
、0
或1
。然后,平方差仅为0
或1
。
如果您使用整数或单个位表示组件,则可以使用简单的位运算而不是某些算术运算(^
表示XOR
或异或
):
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))
您无法直接计算不同长度的向量之间的距离。
下面提供的所有建议都始于将较短的向量映射到更长的向量的函数,然后像通常一样进行计算。
实际上可以使用许多、许多函数(无限多个):
由于距离计算的结果强烈依赖于将较短向量转换为较长向量的函数,因此每个人都需要清楚使用的功能。这要么是因为领域中的每个人都认为只有一个函数有意义,要么是因为转换中使用的函数已经被记录下来。
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的分布任意不同。因此,在这里用零进行填充是没有意义的。
在这种情况下,我建议使用插值方法,方法是使用公共时间瞬间集T,如下所示:
A1_new = interpolate(T1, A1, T);
A2_new = interpolate(T2, A2, T);
其中,interpolate(x,y,xq)接受变量x、函数y(x)和查询点xq作为输入。'interpolate'函数返回插值输出y(xq)。
现在,我们可以通过任何适当的度量方法(例如欧几里得距离)比较相同大小的集合A1_new和A2_new。