如何在已知点的树索引的情况下检索kdtree中该点的坐标?

3
例如,假设我已经从二维数组中的点创建了一个kdtree。然后我对某个点(表示为x-y坐标对)运行最近邻查询,要求找到该点的8个最近邻居。这将返回两个列表:(1)给定点的邻居的8个距离列表,以及(2)这些邻居的树索引列表。
现在假设我想取其中一个树索引,并获取该点的x-y坐标?我该怎么做呢?
2个回答

2

请注意,此处有一个包含树坐标的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.]]

你能提供一个例子来说明如何使用它吗?我已经多次阅读了scipy.spatial.cKDTree.html页面,但没有看到任何提及。此外,您是否知道在哪里可以找到有关此scipy软件包的文档或教程?您引用的网页我以前见过,但几乎完全无法理解。 - Dan Schwartz
添加了示例。在看到你的帖子后,我在文档中找到了这个“特性”,所以我不认为它们难以理解。但是,你需要知道 Python 对象的属性是什么,才能理解它的意义。 - Jon
这非常有帮助,我很感激您费心写下所有这些内容。我不认为我能从那个scipy网页中获得这些信息,但我必须承认我仍在学习Python。 - Dan Schwartz
没关系。我花了一段时间才理解类(也就是“树”)但它们只是存储数据(属性)和函数(方法)的桶。如果你使用带有制表符自动完成功能的IDE(如Spyder),你可以输入“tree.”并查看树对象可用的方法和属性。如果这回答了问题,请接受答案 :) - Jon
我该如何“接受答案”?我在这个网页上没有看到任何相关信息。 - Dan Schwartz
我认为在答案旁边的投票计数器附近有一个小灰色复选标记,您可以单击它以将其变为绿色。请参见 https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work 以获取视觉效果。 - Jon

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接