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]]