【发布时间】:2011-10-27 22:16:28
【问题描述】:
我正在尝试在 X 和 Y 方向上找到空间中最近的点(最后给出的示例数据集),并希望看看是否有比我的琐碎(且未经测试)的方法更聪明的方法来做到这一点。这些点在空间中的图如下所示,我试图找到标记在框内的点集,即我正在寻找的输出是一组组:
Group 1: (1,23), (2,23), (3,23)...
Group 2: (68,200), (68,201), (68,203), (68,204), (68,100), (68,101), (68,101)...
对于水平带,我想我可以继续使用大小为 5 或 10 的小滑动窗口(这应该由全局信息确定,哪个大小将给出最大分组点,但我是仍在探索一种好的方法)并搜索连续点,因为中断不再被视为水平带。
我猜同样的方法也适用于垂直波段,但并非在所有情况下都适用,因为水平和垂直波段存在细微差别:点应该看起来接近水平视为一个组,但它们可以出现在任何地方被认为是垂直带的一部分。观察图中的大垂直带。所以我猜我可以只寻找具有相同 x 坐标的点(在这种情况下,x=68)应该会给我很多分。
除了这个微不足道的解决方案之外,我想不出任何聪明的方法可以在这里完成,因为这个问题对我来说似乎很简单。我在这里错过了什么吗?这是否属于某些已知类别的问题,如果是,是否有一种良好且可扩展的方法来实现这一目标?
示例数据集:
1,23
1,23
2,23
3,23
4,23
5,23
6,23
7,23
8,23
9,23
10,23
11,23
12,23
13,23
14,23
15,23
16,23
10,33
11,33
12,33
13,33
14,33
15,33
16,33
17,33
18,33
19,33
2,28
2,28
3,28
34,75
34,76
34,76
34,77
34,78
34,79
34,80
34,81
34,82
34,83
34,75
34,76
34,76
34,77
34,78
34,79
34,80
34,81
400,28
400,28
400,28
68,200
68,201
68,203
68,204
68,100
68,101
68,103
68,104
【问题讨论】:
-
聚类算法可能很有趣?
-
您可以尝试查看 scipy.cluster 模块,尽管您的系统看起来有点不标准。集群必须是唯一的 1 行、1 列,或者是区域,例如(1,1), (1,2), (2,1), (2,2) 是否允许?
-
看R-tree算法
-
@FredL:实际上,区域也是允许的,只是在我的情况下很难准确地找出一个区域有多大。在朝着您指出的方向前进之前,我试图先获得一维带。
-
@dziobas:您愿意详细说明一下吗?你的意思是,构建一个 R-tree,然后使用所有点查询它以获得空间上近邻?
标签: python algorithm data-mining