首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最优最近邻搜索

最优最近邻搜索
EN

Stack Overflow用户
提问于 2017-07-31 04:12:47
回答 1查看 610关注 0票数 6

我正在寻找半径在1公里以内的所有最近的邻居。这是我的脚本,用来构造树和搜索最近的点,

代码语言:javascript
复制
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))

从我在书页上看到的,上面写着-

kd-树建立在kd-树的功能之上。如果使用scipy.spatial.cKDTree 0.12或更高版本,则使用scipy.spatial.KDTree。

在我的例子中,它应该使用cKDTree。对于示例数据集来说,这很好,但是由于tree.query_ball_point返回索引列表。每个列表都有100个元素。对于我的数据点(200万条记录),这是越来越大,并停止,因为内存问题后,一定的点。知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-13 22:39:07

如果有人想找答案的话,我已经解决了这个问题,方法是为一个组找到最近的邻居(tree.query_ball_point可以处理批处理),然后写入数据库,然后处理下一个组,而不是将它们保存在内存中。谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45407356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档