为简单起见,假设我有一个X,Y坐标列表。 X的限制范围是0-100 mm,Y的范围是0-inf mm。每次迭代都会收到一个新的坐标列表。将所有从Y到最后一个Y的差值大于可配置值(例如300M)的坐标都从列表中删除。
我需要找到一种算法,可以帮助我选择模式中重复的所有坐标。
我有解决这个问题的方法,但是我更喜欢一种“方法上的”方法。
例如,假设我有一个包含以下坐标(X,Y)的列表: (2,9),(2,18),(2,27),(2,54),(2,63),... Y增量配置为9mm。
除第三和第四坐标之间外,几乎所有Y增量均为9。这些坐标丢失了,但仍然是一个模式,算法应该能够分辨出所有这些坐标都来自同一模式。
另一个例子: (2,9),(2,13),(2,18),(2,22),(2,27),(2,54),(2,63),...
在这里,我希望得到与第一个示例相同的结果,即使有更多的坐标不属于模式。
我需要能够准确知道所检测到的模式中的坐标。
答案 0 :(得分:2)
第一个示例的变化量是
9 9 27 9
您会发现,最频繁的是9
,它是27
的除数,并且出于善意,您可以推断出缺少两个数据点。
第二个增量是
-5 14 4 5 27 9
在那儿看到图案毫无意义。
答案 1 :(得分:0)
从我所看到的,您想要的模式是小移位增量和GCD。由于第一个示例可以很快解决,因此让我们来看第二个示例。
9, 13, 18, 22, 27, 54, 63
在这里,shift-1(例如13-9、54-27)和shift-2(18-9、54-22)是增量
4, 5, 4, 5, 27, 9
9, 9, 9, 32, 36
以及这些相邻增量(例如(4,5),(27,9)或(9,9))的GCD是
1, 1, 1, 1, 9
9, 9, 1, 1
这使9
成为一个非常有可能的怀疑者,它是列表中唯一的非统一性值。第二遍寻找9
的倍数将很容易揭示这些值的优势。不合格值将被删除; 9的倍数表示我们需要估算缺失值。
您可以使用自己喜欢的语言对这些搜索进行硬编码。许多现代语言都有一个或两个软件包,它们可以用一个简单的运算符来处理这种变化。在Python中,numpy
和pandas
都会做到这一点。
你能从那里拿走吗?