【问题标题】:good way to match two vectors when order is relevant当顺序相关时匹配两个向量的好方法
【发布时间】:2016-01-03 12:32:32
【问题描述】:

我有两个向量 (v1,v2) 包含坐标。理论上,这些向量应该有相同的长度,并且匹配对(v1(1)~v2(1), ... v1(n)~v2(n))。然而,实际上,有时任何一个向量中都缺少数据点。所以我可能不得不跳过 v1 中的 3 行,或 v2 中的 1 行等。如果我们在匹配中“使用”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

【问题讨论】:

  • 创建mcve?
  • 如果您能告诉我们您要解决的实际问题,而不是您想要执行的特定操作,那将非常有帮助。可能有更好的方法来完成整个事情。就此而言,您如何定义“缺失数据”?您的示例没有缺失值。
  • 缺少数据是指缺少匹配项。问题如下:屏幕上有应该点击的目标。目标位置保存在 v1 中。实际点击量保存在 v2 中。所以有时,主题忘记点击或点击错误的地方等,所以行与v1不同,我需要确定v2中的哪一行属于v1中的哪一行。现在更清楚了吗?
  • 好的,那么,您需要重写您的 GUI,以便无效的点击位置或丢失的点击会弹出警告对话框并强制用户正确操作。否则,您会做出危险的假设,即在存在多个用户错误的情况下正确地重新匹配了数据。

标签: matlab vector match nearest-neighbor


【解决方案1】:

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

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

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

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

还可以查看Edit Distance,它使用与 DTW 类似的原理,可以让您更好地了解序列是如何匹配的。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多