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

查找之间的所有点对 selfother 其距离最多为r

query_pairs \(自身,r[, p, eps] )

查找中的所有点对 self 它的距离至多是r。

sparse_distance_matrix \(自身,其他,最大距离)

计算稀疏距离矩阵