scipy.spatial.KDTree.

query_ball_point#

KDTree.query_ball_point(x, r, p=2.0, eps=0, workers=1, return_sorted=None, return_length=False)[源代码][源代码]#

查找距离点 x 在距离 r 内的所有点。

参数:
xarray_like, 形状元组 + (self.m,)

要搜索邻居的点或点。

rarray_like, float

返回点的半径,必须广播到 x 的长度。

pfloat, 可选

使用哪种 Minkowski p-范数。应在范围 [1, inf] 内。如果可能发生溢出,有限大的 p 可能会导致 ValueError。

eps非负浮点数,可选

近似搜索。如果树的分支的最近点比 r / (1 + eps) 更远,则不会探索这些分支,而如果分支的最远点比 r * (1 + eps) 更近,则这些分支会批量添加。

工人int, 可选

为并行处理安排的工作数量。如果给定 -1,则使用所有处理器。默认值:1。

Added in version 1.6.0.

return_sortedbool, 可选

如果为 True,则返回排序后的索引;如果为 False,则不排序。如果为 None,则不对单点查询进行排序,但对多点查询进行排序,这是在此选项添加之前的行为。

Added in version 1.6.0.

返回长度bool, 可选

返回半径内点的数量,而不是索引列表。

Added in version 1.6.0.

返回:
结果列表或列表的数组

如果 x 是一个单点,返回 x 的邻居的索引列表。如果 x 是一个点数组,返回一个形状元组的对象数组,其中包含邻居的列表。

注释

如果你有许多点想要找到它们的邻居,通过将它们放入KDTree并使用query_ball_tree,你可能会节省大量时间。

示例

>>> import numpy as np
>>> from scipy import spatial
>>> x, y = np.mgrid[0:5, 0:5]
>>> points = np.c_[x.ravel(), y.ravel()]
>>> tree = spatial.KDTree(points)
>>> sorted(tree.query_ball_point([2, 0], 1))
[5, 10, 11, 15]

查询多个点并绘制结果:

>>> import matplotlib.pyplot as plt
>>> points = np.asarray(points)
>>> plt.plot(points[:,0], points[:,1], '.')
>>> for results in tree.query_ball_point(([2, 0], [3, 3]), 1):
...     nearby_points = points[results]
...     plt.plot(nearby_points[:,0], nearby_points[:,1], 'o')
>>> plt.margins(0.1, 0.1)
>>> plt.show()
../../_images/scipy-spatial-KDTree-query_ball_point-1.png