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
。- 参数:
- dataarray_like, 形状 (n,m)
要索引的 m 维 n 个数据点。除非有必要生成双精度浮点数的连续数组,否则不会复制此数组,因此修改此数据将导致错误的结果。如果使用 copy_data=True 构建 kd 树,也会复制数据。
- leafsize正整数,可选
算法切换到暴力搜索的点的数量。默认值:16。
- compact_nodesbool,可选
如果为 True,则构建 kd 树以将超矩形缩小到实际数据范围。这通常会生成一个更紧凑的树,该树对退化的输入数据具有鲁棒性,并且可以加快查询速度,但代价是构建时间更长。默认值:True。
- copy_databool,可选
如果为 True,则始终复制数据以保护 kd 树免受数据损坏。默认值:False。
- balanced_treebool,可选
如果为 True,则使用中位数而不是中点来分割超矩形。这通常会生成一个更紧凑的树并加快查询速度,但代价是构建时间更长。默认值:True。
- boxsizearray_like 或标量,可选
将 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)
要索引的 m 维 n 个数据点。除非有必要生成双精度浮点数的连续数组,否则不会复制此数组。如果使用
copy_data=True
构建 kd 树,也会复制数据。- leafsize正整数
算法切换到暴力搜索的点的数量。
- mint
单个数据点的维度。
- nint
数据点的数量。
- maxesndarray,形状 (m,)
n 个数据点在每个维度上的最大值。
- minsndarray,形状 (m,)
n 个数据点在每个维度上的最小值。
- treeobject,类 cKDTreeNode
此属性公开 cKDTree 对象中根节点的 Python 视图。在第一次访问时,动态创建 kd 树的完整 Python 视图。此属性允许您在 Python 中创建自己的查询函数。
- sizeint
树中节点的数量。
方法
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])查找 self 和 other 之间距离最多为 r 的所有点对
query_pairs
(self, r[, p, eps, output_type])查找 self 中距离最多为 r 的所有点对。
sparse_distance_matrix
(self, other, max_distance)计算稀疏距离矩阵