我想输入数百万个纬度长点(具有数值属性),然后找到所有固定半径的地理空间簇,其中圆内的属性之和超过定义的阈值。
我首先使用sklearn BallTree对任何定义的圆内的属性求和,然后将其扩展到跨圆格或圆格的意图。一个圆的运行时间约为0.01s,因此对于较小的晶格来说很好,但是如果我想在整个英国运行200m半径的圆,则无法缩放。
default_tablespace
感觉上面的代码似乎效率很低,因为我不需要对网格上的所有圆进行计算(因为大多数圆都远低于阈值-或根本没有数据点)。
代替此for循环,是否有更好的方法来缩放此算法以使我得到最密集的圆圈?
我是python的新手,任何帮助将不胜感激!
答案 0 :(得分:0)
首先不要试图在球体上这样做! GB很小,我们有明确定义的地理投影将起作用。因此,将oseast1m
和osnorth1m
列用作X和Y。它们以米为单位,因此无需(大约)转换为度数并使用Haversine。那应该有帮助。
接下来添加一个spatial index以加快查找速度。
如果您需要更高的速度,可以使用多种技巧,例如将2R条形图加载到整个国家的内存中,然后在该条形图上绕圈,然后向下移动网格步骤并更新该条形图(将Y值与固定值进行比较是快速,特别是如果您存储按Y排序的数据,然后按X值排序)。如果您需要更高的速度,请参阅任何papers the Stan Openshaw(有时是我)写的关于并行化GAM的文章。有一些在python中实现GAM的示例(例如this paper,this paper),这些示例也可能指向更好的方法。