如何加快搜索算法

时间:2019-01-30 18:50:08

标签: python arrays numpy

我有两个不同的目录($dates = "2019-01-21 to 2019-01-31"; list($from_date, $to_date) = array_map(function($date) { return Carbon\Carbon::parse($date); }, explode('to', $dates)); data_in)点多的data_out的坐标。如下图所示,我需要找到所有x,y的点是接近data_in的点,特别是所有data_out半径的圆内的点data_in,集中于每{{ 1}}分。

这个小脚本可以正常工作,但是非常慢。有办法加快这个过程吗?

r_search

2 个答案:

答案 0 :(得分:1)

您描述的应用程序最快的算法是k-dimensional tree,尤其是二维树,更好地称为quad-tree。它的工作方式是将您拥有的大数组划分为包含闭合点组的较小数组。

可以自己实现,但不建议这样做,因为有些库的优化程度超出了您自己的能力。 几年前,有some discussion是最好的。但是现在可以说this库是最好的。

答案 1 :(得分:1)

一种可能的优化方法是从距离计算中删除(昂贵的)平方根,然后与平方搜索半径进行比较,因此:

r_tmp = np.sqrt(np.power(delta_x,2) + np.power(delta_y,2))
if (r_tmp <= r_search):

成为:

r_tmp = np.power(delta_x,2) + np.power(delta_y,2)
if (r_tmp <= r_search*r_search):