我有一个塔的熊猫数据框,例如:
site lat lon
18ALOP01 11.1278 14.3578
18ALOP02 11.1278 14.3578
18ALOP12 11.1288 14.3575
18PENO01 11.1580 14.2898
如果它们太近(50m),我需要将它们分组。然后,我制作了一个脚本,该脚本执行“自我交叉连接”,计算所有站点组合之间的距离,并为该距离小于阈值的站点设置相同的ID。因此,如果我有n个站点,它将计算(n^2) - n
个组合,那么,这是一个较差的算法。有更好的方法吗?
答案 0 :(得分:1)
假设站点的数目和“真实”位置未知,则可以尝试MeanShift聚类算法。虽然这是一种通用算法,而且扩展性不高,但它比在python中实现自己的聚类算法要快,如果将数据点合并到网格中可以接受,那么您可以尝试使用bin_seeding=True
作为优化,修剪以修剪起始种子。 (请注意:如果将数据点合并到网格而不是计算点之间的欧几里得距离,是可以接受的“完整”解决方案,那么这似乎将是解决问题的最快方法。)
这是scikit-learn实施MeanShift的示例,其中x / y坐标以米为单位,该算法创建半径为50m的聚类。
@IBAction func takeSnapButton(_ sender: Any) {
// It is probably safe to assume that there is definitely an image at this point but to be extra
guard let image = self.webView.snapshot(of: self.rect) else { print("An image could not be taken"); return}
}