【发布时间】: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