scipy.spatial.

cKDTree#

class scipy.spatial.cKDTree(data, leafsize=16, compact_nodes=True, copy_data=False, balanced_tree=True, boxsize=None)#

用於快速最近鄰搜尋的 kd 樹

此類別提供 k 維點集合的索引,可用於快速查找任何點的最近鄰。

注意

cKDTree 在功能上與 KDTree 完全相同。在 SciPy v1.6.0 之前,cKDTree 具有更好的效能和稍微不同的功能,但現在這兩個名稱的存在僅是為了向後相容性的原因。如果與 SciPy < 1.6 的相容性不是問題,請優先使用 KDTree

參數:
data類陣列 (array_like),形狀 (n,m)

要建立索引的 n 個 m 維資料點。除非為了產生雙精度浮點數的連續陣列而有必要,否則不會複製此陣列,因此修改此資料將導致錯誤的結果。如果 kd 樹是使用 copy_data=True 建置的,也會複製資料。

leafsize正整數,選用

演算法切換到暴力搜尋的點數。預設值:16。

compact_nodes布林值,選用

如果為 True,則建置 kd 樹以將超矩形縮小到實際資料範圍。這通常會產生更緊湊的樹,能更穩健地應對退化的輸入資料,並以較長的建置時間為代價提供更快的查詢。預設值:True。

copy_data布林值,選用

如果為 True,則始終複製資料以保護 kd 樹免於資料損壞。預設值:False。

balanced_tree布林值,選用

如果為 True,則使用中位數而不是中點來分割超矩形。這通常會產生更緊湊的樹,並以較長的建置時間為代價提供更快的查詢。預設值:True。

boxsize類陣列或純量,選用

將 m 維環面拓樸應用於 KDTree。拓樸由 \(x_i + n_i L_i\) 生成,其中 \(n_i\) 是整數,而 \(L_i\) 是沿第 i 維的 boxsize。輸入資料應包裝到 \([0, L_i)\) 中。如果任何資料超出此範圍,則會引發 ValueError。

註解

所使用的演算法在 Maneewongvatana 和 Mount 1999 中有描述。一般概念是 kd 樹是一個二元樹,其每個節點代表一個軸對齊的超矩形。每個節點指定一個軸,並根據點沿該軸的坐標是大於還是小於特定值來分割點集。

在建構期間,軸和分割點是透過「滑動中點」規則選擇的,這確保了儲存格不會都變得又長又薄。

可以查詢樹以取得任何給定點的 r 個最近鄰(可選擇僅傳回在距該點一定最大距離內的鄰居)。也可以查詢樹以取得 r 個近似最近鄰,效率會大幅提升。

對於高維度(20 已經很大),不要期望它的執行速度比暴力搜尋快很多。高維最近鄰查詢是電腦科學中一個重要的開放問題。

屬性:
datandarray,形狀 (n,m)

要建立索引的 n 個 m 維資料點。除非為了產生雙精度浮點數的連續陣列而有必要,否則不會複製此陣列。如果 kd 樹是使用 copy_data=True 建置的,也會複製資料。

leafsize正整數

演算法切換到暴力搜尋的點數。

m整數

單一資料點的維度。

n整數

資料點的數量。

maxesndarray,形狀 (m,)

n 個資料點在每個維度中的最大值。

minsndarray,形狀 (m,)

n 個資料點在每個維度中的最小值。

tree物件,類別 cKDTreeNode

此屬性公開 cKDTree 物件中根節點的 Python 視圖。kd 樹的完整 Python 視圖會在第一次存取時動態建立。此屬性允許您在 Python 中建立自己的查詢函數。

size整數

樹中節點的數量。

方法

count_neighbors(self, other, r[, p, ...])

計算可以形成的鄰近配對數量。

query(self, x[, k, eps, p, ...])

查詢 kd 樹以取得最近鄰

query_ball_point(self, x, r[, p, eps, ...])

找出距離點 x 距離 r 內的所有點。

query_ball_tree(self, other, r[, p, eps])

找出 selfother 之間距離最多為 r 的所有點對

query_pairs(self, r[, p, eps, output_type])

找出 self 中距離最多為 r 的所有點對。

sparse_distance_matrix(self, other, max_distance)

計算稀疏距離矩陣