有两种不同的方法来计算两个相同长度的矢量之间的距离:Euclidean,Manhattan,Hamming ......
我想知道任何可以计算不同长度的矢量之间距离的方法。
答案 0 :(得分:8)
欧氏距离公式可以找出欧几里德空间中任意两点之间的距离。
欧几里得空间中的一个点也称为欧几里德向量。
您可以使用欧几里德距离公式计算两种不同长度的矢量之间的距离。
对于不同维度的矢量,同样的原则适用。
假设较高维度的向量也存在于较高维空间中。然后,您可以将较低维向量中的所有缺失组件设置为0,以便两个向量具有相同的维度。然后,您将使用任何提到的距离公式来计算距离。
例如,考虑A
中包含R²
的二维向量(a1,a2)
和B
中带有组件的三维向量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))
答案 1 :(得分:2)
您不能直接计算不同长度的矢量之间的距离。
此处的所有建议都以一个函数开始,该函数将较低长度的向量映射到较长的向量,然后正常进行计算。
有很多很多功能(事实上可以无限多):
由于距离计算的结果很大程度上取决于将较短矢量转换为较长矢量的函数,因此每个人都需要清楚使用什么函数。或者是因为字段中的每个人都同意只有一个函数有意义,或者因为转换中使用的函数被记下来。
答案 2 :(得分:0)
您可以尝试计算维数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)))
答案 3 :(得分:0)
用零填充短尺寸阵列以使其具有与长尺寸阵列相同的长度的想法并不像#34;通常"一个正确的想法。
例如,如果我们在不同的时刻对同一参数(例如温度,速度或二进制参数作为开/关开关的状态)进行了两组测量(数组,矢量......)测量。假设第一组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。 '插值'函数返回插值输出y(xq)。
现在,我们可以通过任何合适的度量比较相同大小的集合A1_new和A2_new,例如欧氏距离。