顺序相关时匹配两个向量的好方法
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 类似的原理,可能会让您更好地了解序列是如何匹配的。
祝你好运!
我有两个向量 (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 类似的原理,可能会让您更好地了解序列是如何匹配的。
祝你好运!