scipy.spatial.cKDTree.

query#

cKDTree.query(self, x, k=1, eps=0, p=2, distance_upper_bound=np.inf, workers=1)#

查詢 kd 樹以尋找最近鄰居

參數:
xarray_like,最後維度 self.m

要查詢的點陣列。

k整數或整數列表

要傳回的第 k 個最近鄰居列表。如果 k 是整數,則將其視為 [1, … k] (range(1, k+1)) 的列表。請注意,計數從 1 開始。

eps非負浮點數

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

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

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

distance_upper_bound非負浮點數

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

workers整數,可選

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

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

傳回值:
d浮點數陣列

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

i整數的 ndarray

self.data 中每個鄰居的索引。如果 x 的形狀為 tuple+(self.m,),則 i 的形狀為 tuple+(k,)。當 k == 1 時,輸出的最後一個維度會被擠壓掉。遺失的鄰居以 self.n 表示。

註解

如果 KD 樹是週期性的,則位置 x 會被包裝到方框中。

當輸入 k 是列表時,將執行 arange(max(k)) 的查詢,但僅保留儲存 k 請求值的欄位。這是以減少記憶體使用量的方式實作的。

範例

>>> import numpy as np
>>> from scipy.spatial import cKDTree
>>> x, y = np.mgrid[0:5, 2:8]
>>> tree = cKDTree(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]]