顺序相关时匹配两个向量的好方法

good way to match two vectors when order is relevant

我有两个向量 (v1,v2) 包含坐标。理论上,这些向量应该具有相同的长度和匹配对(v1(1)~v2(1), ... v1(n)~v2(n))。然而,实际上,有时两个向量中的任何一个都缺少数据点。所以我可能不得不跳过 v1 中的 3 行,或 v2 中的 1 行,等等。如果我们在匹配中有 'used' v2(20),则下一个可能的索引大于 20.

如何找到两者的正确匹配?

我考虑过计算距离(因为坐标应该大致相等)...但我不确定如何确定最佳匹配。 这种方法对我来说似乎不太优雅。任何优雅的建议? 我尝试了 k-最近邻,它只在一定程度上起作用,因为没有顺序限制,而且我的向量中有重复项。

我正在使用 MATLAB,也许已经存在有用的函数?

v1                 v2
   0   100 (a)         100  -50
 150  -220 (b)        -10    90 (a)
-280  -200 (c)        -20    100
-330   330             160  -200 (b)
 300   220 (d)        -240  -200 (c)
 350   400 (e)         320   250 (d)
-100  -300 (f)         320   250
-150  -250             320   380 (e)
   0  -250 (g)        -110  -320 (f)
   0  -100             0    -250 (g)

我在正确匹配的旁边写了字母

好的,我觉得下面的应该行得通,明天实施。仍然愿意接受建议。:

while not found
see if v1(i) matches v2(i+a)
if it doesn't, swap v1 and v2 and increase a, comparing from a=0 upto a=x

希望以下内容对您有所帮助:

您似乎需要计算两个序列 X 和 Y 之间的动态时间扭曲 (DTW)。DTW 将找到最小误差扭曲,即匹配 X 的每个点与 Y 的一个点的路径.

有很多 DTW 教程(查看 pdf、youtube 视频)和 matlab code 您可以查看。

根据您的问题,您可能需要更改 DTW 中的一些内容,以便以最适合您的应用程序的方式处理丢失的数据。

同时检查 Edit Distance,它使用与 DTW 类似的原理,可能会让您更好地了解序列是如何匹配的。

祝你好运!