【发布时间】:2021-09-09 07:37:23
【问题描述】:
例如,假设我从二维数组中的点创建了一个 kdtree。然后我在某个点(表示为一对 x-y 坐标)上运行最近邻查询,询问该点的 8 个最近邻。这将返回两个列表:(1) 到给定品脱的邻居的 8 个距离列表,以及 (2) 这些邻居的树索引列表。
现在假设我想获取其中一个树索引并获取该点的 x-y 坐标?我该怎么做?
【问题讨论】:
例如,假设我从二维数组中的点创建了一个 kdtree。然后我在某个点(表示为一对 x-y 坐标)上运行最近邻查询,询问该点的 8 个最近邻。这将返回两个列表:(1) 到给定品脱的邻居的 8 个距离列表,以及 (2) 这些邻居的树索引列表。
现在假设我想获取其中一个树索引并获取该点的 x-y 坐标?我该怎么做?
【问题讨论】:
如果有人感兴趣,我的一位学生提供了答案。没有返回此信息的 kdtree 方法,但您可以从用于创建树的原始列表中获取它。用于构建树的点的 x-y 坐标取自两个列表,一个是 x 坐标,另一个是 y 坐标。然后,当你做一个 kdtree 查询时,查询返回的索引列表可以作为两个原始列表的索引,以取回原始的 x-y 对。
【讨论】:
仅供参考,有一个 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.]]
【讨论】: