优化 scipy 最近邻搜索
Optimize scipy nearest neighbor search
我正在尝试查找 1 公里半径内的所有最近邻居。这是我构建树和搜索最近点的脚本,
from pysal.cg.kdtree import KDTree
def construct_tree(s):
data_geopoints = [tuple(x) for x in s[['longitude','latitude']].to_records(index=False)]
tree = KDTree(data_geopoints, distance_metric='Arc', radius=pysal.cg.RADIUS_EARTH_KM)
return tree
def get_neighbors(s,tree):
indices = tree.query_ball_point(s, 1)
return indices
#Constructing the tree for search
tree = construct_tree(data)
#Finding the nearest neighbours within 1KM
data['neighborhood'] = data['lat_long'].apply(lambda row: get_neighbors(row,tree))
根据我在 pysal 页面中阅读的内容,它说 -
kd-tree built on top of kd-tree functionality in scipy. If using scipy
0.12 or greater uses the scipy.spatial.cKDTree, otherwise uses scipy.spatial.KDTree.
在我的例子中,它应该使用 cKDTree。这对于示例数据集来说工作正常,但是由于 tree.query_ball_point
returns 结果是索引列表。每个列表将包含 100 个元素。对于我的数据点(200 万条记录),它变得越来越大,并且在某个点后由于内存问题而停止。知道如何解决这个问题吗?
以防万一有人为此寻找答案,我已经通过找到一组的最近邻居(tree.query_ball_point 可以处理批次)并写入数据库然后处理下一组来解决它,而不是将所有内容都保存在内存中。谢谢。
我正在尝试查找 1 公里半径内的所有最近邻居。这是我构建树和搜索最近点的脚本,
from pysal.cg.kdtree import KDTree
def construct_tree(s):
data_geopoints = [tuple(x) for x in s[['longitude','latitude']].to_records(index=False)]
tree = KDTree(data_geopoints, distance_metric='Arc', radius=pysal.cg.RADIUS_EARTH_KM)
return tree
def get_neighbors(s,tree):
indices = tree.query_ball_point(s, 1)
return indices
#Constructing the tree for search
tree = construct_tree(data)
#Finding the nearest neighbours within 1KM
data['neighborhood'] = data['lat_long'].apply(lambda row: get_neighbors(row,tree))
根据我在 pysal 页面中阅读的内容,它说 -
kd-tree built on top of kd-tree functionality in scipy. If using scipy 0.12 or greater uses the scipy.spatial.cKDTree, otherwise uses scipy.spatial.KDTree.
在我的例子中,它应该使用 cKDTree。这对于示例数据集来说工作正常,但是由于 tree.query_ball_point
returns 结果是索引列表。每个列表将包含 100 个元素。对于我的数据点(200 万条记录),它变得越来越大,并且在某个点后由于内存问题而停止。知道如何解决这个问题吗?
以防万一有人为此寻找答案,我已经通过找到一组的最近邻居(tree.query_ball_point 可以处理批次)并写入数据库然后处理下一组来解决它,而不是将所有内容都保存在内存中。谢谢。