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, 形狀 tuple + (self.m,)

要搜尋鄰近點的點或多個點。

rarray_like, 浮點數

要返回的點的半徑,應廣播到 x 的長度。

p浮點數,選填

要使用的 Minkowski p-範數。應在 [1, inf] 範圍內。有限大的 p 值可能會在發生溢位時導致 ValueError。

eps非負浮點數,選填

近似搜尋。如果樹狀結構的分支最近點遠於 r / (1 + eps),則不會探索這些分支;如果最遠點近於 r * (1 + eps),則會批量加入這些分支。

workers整數,選填

要排程以進行平行處理的作業數量。 如果給定 -1,則使用所有處理器。 預設值:1。

在 1.9.0 版本中變更:“n_jobs” 參數已重新命名為 “workers”。舊名稱 “n_jobs” 在 SciPy 1.6.0 中已棄用,並在 SciPy 1.9.0 中移除。

return_sorted布林值,選填

如果為 True,則對返回的索引進行排序,如果為 False 則不排序。 如果為 None,則不對單點查詢進行排序,但會對多點查詢進行排序,這是新增此選項之前的行為。

在 1.2.0 版本中新增。

return_length: 布林值,選填

返回半徑內的點數量,而不是索引列表。 .. versionadded:: 1.3.0

返回:
results列表或列表陣列

如果 x 是單個點,則返回 x 的鄰近點的索引列表。 如果 x 是點陣列,則返回形狀為 tuple 的物件陣列,其中包含鄰近點列表。

註解

如果您有很多點想要找到鄰近點,您可以將它們放入 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()
../../_images/scipy-spatial-cKDTree-query_ball_point-1.png