當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python SciPy cKDTree.query用法及代碼示例

本文簡要介紹 python 語言中 scipy.spatial.cKDTree.query 的用法。

用法:

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

查詢最近鄰居的kd-tree

參數

x 數組,最後一維 self.m

要查詢的點數組。

k 整數或整數列表

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

eps 非負浮點數

返回近似最近鄰; k-th 返回值保證不超過 (1+eps) 乘以與真實 k-th 最近鄰居的距離。

p 浮點數,1<=p<=無窮大

使用哪個 Minkowski p-norm。 1 是 sum-of-absolute-values “Manhattan” 距離 2 是通常的歐幾裏德距離 無窮大是 maximum-coordinate-difference 距離 如果可能發生溢出,有限的大 p 可能會導致 ValueError。

distance_upper_bound 非負浮點數

僅返回此距離內的鄰居。這用於修剪樹搜索,因此如果您正在執行一係列nearest-neighbor 查詢,它可能有助於提供到最近點的最近鄰居的距離。

workers 整數,可選

用於並行處理的工作人員數量。如果指定 -1,則使用所有 CPU 線程。默認值:1。

返回

d 浮點數數組

到最近鄰居的距離。如果 x 具有形狀 tuple+(self.m,) ,則 d 具有形狀 tuple+(k,) 。當 k == 1 時,輸出的最後一個維度被壓縮。缺失的鄰居用無限距離表示。

i 整數數組

self.data 中每個鄰居的索引。如果 x 具有形狀 tuple+(self.m,) ,則 i 具有形狀 tuple+(k,) 。當 k == 1 時,輸出的最後一個維度被壓縮。缺少的鄰居用 self.n 表示。

注意

如果 KD-Tree 是周期性的,則位置 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]]

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.spatial.cKDTree.query。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。