scipy.spatial.cKDTree.
query_ball_point#
- cKDTree.query_ball_point(self, x, r, p=2., 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。
在 1.9.0 版本发生变更: 参数“n_jobs”已重命名为“workers”。旧名称“n_jobs”在SciPy 1.6.0中已被弃用,并在SciPy 1.9.0中被移除。
- return_sortedbool, 可选
如果为 True,则返回排序后的索引;如果为 False,则不排序。如果为 None,则不对单点查询进行排序,但对多点查询进行排序,这是在此选项添加之前的行为。
Added in version 1.2.0.
- return_length: bool, 可选
返回半径内点的数量,而不是索引列表。 .. versionadded:: 1.3.0
- 返回:
- 结果列表或列表的数组
如果 x 是一个单点,返回 x 的邻居的索引列表。如果 x 是一个点数组,返回一个形状元组的对象数组,其中包含邻居的列表。
注释
如果你有许多点需要找到它们的邻居,通过将它们放入 cKDTree 并使用 query_ball_tree,你可能会节省大量时间。
示例
>>> import numpy as np >>> from scipy import spatial >>> x, y = np.mgrid[0:4, 0:4] >>> points = np.c_[x.ravel(), y.ravel()] >>> tree = spatial.cKDTree(points) >>> tree.query_ball_point([2, 0], 1) [4, 8, 9, 12]
查询多个点并绘制结果:
>>> 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()