scipy.spatial.KDTree.

query#

KDTree.query(x, k=1, eps=0, p=2, distance_upper_bound=inf, workers=1)[source]#

查詢 kd 樹以尋找最近鄰居。

參數:
xarray_like, last dimension self.m

要查詢的點陣列。

kint 或 Sequence[int],選用

要傳回的最近鄰居數量,或是從 1 開始要傳回的第 k 個最近鄰居的清單。

eps非負浮點數,選用

傳回近似最近鄰居;保證傳回的第 k 個值與實際第 k 個最近鄰居的距離不超過 (1+eps) 倍。

p浮點數,1<=p<=infinity,選用

要使用的 Minkowski p-norm。1 是絕對值總和距離(「曼哈頓」距離)。2 是常用的歐幾里得距離。infinity 是最大座標差距離。如果可能發生溢位,則大的有限 p 可能會導致 ValueError。

distance_upper_bound非負浮點數,選用

僅傳回在此距離內的鄰居。這用於修剪樹狀結構搜尋,因此如果您要進行一系列最近鄰居查詢,則提供最近點的最近鄰居距離可能會有所幫助。

workersint,選用

用於平行處理的 worker 數量。如果給定 -1,則使用所有 CPU 執行緒。預設值:1。

在 1.6.0 版本中新增。

回傳:
d浮點數或浮點數陣列

到最近鄰居的距離。如果 x 的形狀為 tuple+(self.m,),則 d 的形狀為 tuple+(k,)。當 k == 1 時,會擠壓輸出的最後一個維度。遺失的鄰居以無限距離表示。命中次數依距離排序(最近的優先)。

在 1.9.0 版本中變更:先前如果 k=None,則 d 是形狀為 tuple 的物件陣列,其中包含距離清單。此行為已移除,請改用 query_ball_point

i整數或整數陣列

self.data 中每個鄰居的索引。i 的形狀與 d 相同。遺失的鄰居以 self.n 表示。

範例

>>> import numpy as np
>>> from scipy.spatial import KDTree
>>> x, y = np.mgrid[0:5, 2:8]
>>> tree = KDTree(np.c_[x.ravel(), y.ravel()])

若要查詢最近鄰居並傳回擠壓後的結果,請使用

>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=1)
>>> print(dd, ii, sep='\n')
[2.         0.2236068]
[ 0 13]

若要查詢最近鄰居並傳回未擠壓的結果,請使用

>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=[1])
>>> print(dd, ii, sep='\n')
[[2.        ]
 [0.2236068]]
[[ 0]
 [13]]

若要查詢第二近的鄰居並傳回未擠壓的結果,請使用

>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=[2])
>>> print(dd, ii, sep='\n')
[[2.23606798]
 [0.80622577]]
[[ 6]
 [19]]

若要查詢第一和第二近的鄰居,請使用

>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=2)
>>> print(dd, ii, sep='\n')
[[2.         2.23606798]
 [0.2236068  0.80622577]]
[[ 0  6]
 [13 19]]

或者,更具體地說

>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=[1, 2])
>>> print(dd, ii, sep='\n')
[[2.         2.23606798]
 [0.2236068  0.80622577]]
[[ 0  6]
 [13 19]]