如何通过kdtree返回的树索引查询对应点的坐标信息
实现方法
核心逻辑非常简单:构建KD树时输入的原始点集的下标,和KD树返回的树索引是完全一一对应的,直接用返回的索引到原始点数组中取值即可。
下面以Python常用的scipy.spatial.KDTree为例给出完整示例:
- 第一步:准备原始二维点集、构建KD树
import numpy as np from scipy.spatial import KDTree # 示例原始二维点集,shape为(点数量, 2) points = np.array([ [1, 2], [3, 4], [5, 6], [7, 8], [2, 1], [4, 3], [6, 5], [8, 7], [9, 1], [1, 9] ]) # 构建KD树 kdtree = KDTree(points)
- 第二步:执行最近邻查询,获取距离和索引列表
# 示例查询点 query_point = [4.1, 3.2] # 查询最近的8个邻居,返回距离列表和索引列表 distances, indices = kdtree.query(query_point, k=8) # 打印返回的8个索引看结果 print("返回的树索引列表:", indices)
- 第三步:用索引获取对应点的x-y坐标
# 比如要拿indices列表中第2个位置的索引对应的坐标 target_idx = indices[2] # 直接从原始点集取即可,这里x_y就是目标点的[x, y]坐标 x_y = points[target_idx] print(f"索引{target_idx}对应的坐标:", x_y)
注意:如果是其他语言的KD树实现,只要是标准的最近邻查询逻辑,规则都是通用的:返回的索引一定对应你构建树时传入的原始点序列的位置,不需要额外调用KD树的接口查坐标,直接访问原始点集是效率最高的方式。
内容的提问来源于stack exchange,提问作者Dan Schwartz
相关产品推荐
相关产品推荐

