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