如何检测不一致的坐标模式?

时间:2019-06-05 12:50:46

标签: algorithm

为简单起见,假设我有一个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),...

在这里,我希望得到与第一个示例相同的结果,即使有更多的坐标不属于模式。

我需要能够准确知道所检测到的模式中的坐标。

2 个答案:

答案 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中,numpypandas都会做到这一点。

你能从那里拿走吗?