gpt4 book ai didi

python - 优化 scipy 最近邻搜索

转载 作者:太空狗 更新时间:2023-10-30 00:18:52 27 4
gpt4 key购买 nike

我试图找到 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 结果返回索引列表。每个列表将包含 100 个元素。对于我的数据点(200 万条记录),它变得越来越大,并且在某个点后由于内存问题而停止。关于如何解决这个问题的任何想法?

最佳答案

以防万一如果有人为此寻找答案,我已经通过找到一组的最近邻居(tree.query_ball_point 可以处理批处理)并写入数据库然后处理下一组来解决它,而不是保留所有在内存中。谢谢。

关于python - 优化 scipy 最近邻搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45407356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com