如何在给定点的树索引的情况下检索 kdtree 中点的坐标?



例如,假设我已经从二维数组中的点创建了一个kdtree。然后,我对某个点(表示为一对x-y坐标(运行最近邻居查询,询问该点的8个最近邻居。这返回两个列表:(1(到给定品脱的邻居的8个距离的列表,以及(2(这些邻居的树索引的列表。

假设现在我想取其中一个树索引,得到那个点的x-y坐标?我该怎么做?

FYI有一个包含树坐标的data属性:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.cKDTree.html

所以你可以通过获得你的坐标

tree.data[index]

下面是一个完整的例子:

import numpy as np
from scipy.spatial import KDTree
pts = np.array([(1, 1), (2, 1), (3, 1), (4, 1), (1, 2), (2, 2), (3, 2), (4, 2), (1, 3), (2, 3), (3, 3), (4, 3), (1, 4), (2, 4), (3, 4), (4, 4)])
# Build tree
tree = KDTree(pts)
# Query tree for points within distance=2 of (1,1)
idx = tree.query_ball_point([1,1],r=2)
print(idx)

产生

[0, 4, 8, 1, 5, 2]

然后为了得到这些标记的坐标,

# Get coordinates of the indices
print(tree.data[idx])
[[1. 1.]
[1. 2.]
[1. 3.]
[2. 1.]
[2. 2.]
[3. 1.]]

如果有人感兴趣,我的一个学生提供了答案。没有返回此信息的kdtree方法,但您可以从用于创建树的原始列表中获取该信息。用于构建树的点的x-y坐标取自两个列表,一个是x坐标,另一个是y坐标。然后,当您执行kdtree查询时,查询返回的索引列表可以用作两个原始列表的索引,以获取原始的x-y对。