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类似数组,形状(n,m)
要索引的维度为m的n个数据点。除非需要复制此数组以生成连续的双精度数组,否则不会复制此数组,因此修改此数据将导致虚假结果。如果使用copy_data=True构建kd-tree,也会复制数据。
- leafsize正整数,可选
算法切换到暴力模式的点数。默认值:16。
- compact_nodes布尔值,可选
如果为True,则构建kd-tree以将超矩形缩小到实际数据范围。这通常提供一个更紧凑的树,它对退化的输入数据是健壮的,并且以更长的构建时间为代价提供更快的查询。默认值:TRUE。
- copy_data布尔值,可选
如果为True,则始终复制数据以保护kd-tree免受数据损坏。默认值:False。
- balanced_tree布尔值,可选
如果为True,则使用中值而不是中点来分割超矩形。这通常会以较长的构建时间为代价提供更紧凑的树和更快的查询。默认值:TRUE。
- boxsizeARRAY_LIKE或标量,可选
将m-d环状拓扑应用于KDTree。拓扑由生成 \(x_i + n_i L_i\) 哪里 \(n_i\) 是整数,并且 \(L_i\) 是沿第i维的方框大小。应将输入数据包装到 \([0, L_i)\) 。如果任何数据超出此界限,则会引发ValueError。
注意事项
在Maneewongvatana和Mount 1999中描述了使用的算法。一般的想法是,kd-tree是二叉树,其每个节点表示一个轴对齐的超矩形。每个节点指定一个轴,并根据其沿该轴的坐标是大于还是小于特定值来拆分该组点。
在施工过程中,轴线和分割点的选择采用了“滑动中点”原则,保证了单元格不会全部变得又长又细。
可以在树中查询任何给定点的r个最近邻居(可选地,仅返回点的某个最大距离内的邻居)。还可以在效率大幅提高的情况下查询R个近似最接近的邻居。
对于较大的维度(20已经很大),不要期望这会比蛮力运行得快很多。高维最近邻查询是计算机科学中一个重要的开放问题。
- 属性
- datandarray,形状(n,m)
要索引的维度为m的n个数据点。除非需要复制此数组以产生连续的双精度数组,否则不会复制此数组。如果使用构建kd-tree,也会复制数据 copy_data=True 。
- leafsize正整数
算法切换到暴力模式的点数。
- m集成
单个数据点的维度。
- n集成
数据点的数量。
- maxesndarray,形状(m,)
n个数据点的每个维度中的最大值。
- minsndarray,形状(m,)
n个数据点的每个维度中的最小值。
- tree对象,类cKDTreeNode
该属性公开cKDTree对象中根节点的Python视图。在第一次访问时动态创建kd-tree的完整Python视图。此属性允许您在Python中创建自己的查询函数。
- size集成
树中的节点数。
方法:
count_neighbors
\(自身,其他,r[, p, ...] )数一下附近可以形成多少对。
query
\(自身,x[, k, eps, p, ...] )查询最近邻域的kd-tree
query_ball_point
\(自身,x,r[, p, eps, ...] )查找点x的距离r内的所有点。
query_ball_tree
\(自身,其他,r[, p, eps] )查找之间的所有点对 self 和 other 其距离最多为r
query_pairs
\(自身,r[, p, eps] )查找中的所有点对 self 它的距离至多是r。
sparse_distance_matrix
\(自身,其他,最大距离)计算稀疏距离矩阵