如何在python

时间:2019-04-03 18:42:51

标签: python cluster-analysis

我有一个RPLidar,我的任务是发现障碍。从传感器上,我得到了一组麻线,其中包含信号质量,角度和距离(以毫米为单位)。

以下是示例:

[(15, 1.375, 2569.0), (15, 3.0, 2491.5), (15, 4.578125, 2528.75), (15, 6.203125, 2419.75), (15, 7.796875, 2299.75), (15, 9.40625, 2200.5), (15, 11.078125, 2104.25), (15, 12.703125, 2047.25), (15, 14.3125, 2091.75), (15, 15.84375, 2132.25), (15, 17.46875, 2183.75), (15, 19.015625, 2232.5), (15, 20.609375, 2288.75), (15, 22.15625, 2341.0), (15, 23.765625, 2411.0), (15, 25.34375, 2481.0), (15, 26.875, 2554.25), (15, 28.453125, 2641.0), (15, 30.046875, 2731.5), (15, 31.609375, 2824.0), (15, 33.1875, 2854.75), (11, 39.8125, 2178.0), (15, 41.390625, 2278.0), (15, 42.984375, 2199.5), (13, 44.546875, 2269.0), (15, 46.171875, 2265.5), (15, 47.71875, 2300.75), (15, 49.3125, 2454.25), (15, 50.890625, 2442.0), (15, 52.484375, 2415.0), (15, 54.109375, 2404.0), (15, 55.703125, 2390.0), (15, 57.28125, 2371.0), (15, 58.796875, 2357.5), (15, 60.421875, 2348.5), (15, 61.984375, 2344.0), (15, 63.5625, 2340.5), (15, 65.171875, 2332.75), (15, 66.75, 2328.25), (15, 68.34375, 2330.75), (15, 69.984375, 2324.5), (15, 71.515625, 2328.25), (15, 73.125, 2332.75), (15, 74.71875, 2335.75), (15, 76.28125, 2341.5)]

我已经在matplotlib中绘制了这些数据,这就是它们的样子:

![enter image description here

如您所见,我正在获取周围的信息作为点,并且每个点的质量,角度,与中心的距离都相同。现在,我想对它们进行分组,并需要找到每个组的长度。我怎么能做到这一点? python有没有可用的库让我像波纹管一样进行聚类?enter image description here

2 个答案:

答案 0 :(得分:2)

明显的解决方案#1:

将数据从极坐标投影到笛卡尔坐标。然后,您可以使用任何基于坐标的算法(例如k均值)以及任何适用于欧几里德距离的算法(例如HAC,DBSCAN)

明显的解决方案2:

计算极坐标中的成对距离。对于大数据而言,这可能比上述方法更为复杂,因此速度较慢,但​​更为明显。有了距离矩阵时,请使用任何基于距离的算法,例如HAC,DBSCAN,亲和力传播,光谱聚类。

根据您的情节,我将设计并使用DBSCAN。

答案 1 :(得分:-1)

在我看来,这就像一个K均值聚类问题。您可以利用许多现有解决方案来实现这一目标。 blog post是有关如何在Panda中实现此目标的信息。

如果数量可能很大,我做了一个项目,在backside的Pyspark中进行k均值聚类。您可以找到更多信息here