query#
- cKDTree.query(self, x, k=1, eps=0, p=2, distance_upper_bound=np.inf, workers=1)#
查询 kd 树以获取最近邻
- 参数:
- xarray_like, last dimension self.m
要查询的点的数组。
- klist of integer or integer
要返回的第 k 个最近邻列表。如果 k 是整数,则将其视为列表 [1, … k] (range(1, k+1))。请注意,计数从 1 开始。
- epsnon-negative float
返回近似最近邻;保证第 k 个返回值不大于到实际第 k 个最近邻距离的 (1+eps) 倍。
- pfloat, 1<=p<=infinity
要使用的 Minkowski p 范数。 1 是绝对值之和“曼哈顿”距离,2 是通常的欧几里得距离,无穷大是最大坐标差距离。如果可能发生溢出,有限的较大 p 可能会导致 ValueError。
- distance_upper_boundnonnegative float
仅返回此距离内的邻居。这用于修剪树搜索,因此如果您要进行一系列最近邻查询,则提供到最近点的最近邻居的距离可能会有所帮助。
- workersint, optional
用于并行处理的worker数量。如果给定 -1,则使用所有 CPU 线程。默认值:1。
在版本 1.9.0 中更改:参数“n_jobs”已重命名为“workers”。旧名称“n_jobs”已在 SciPy 1.6.0 中弃用,并在 SciPy 1.9.0 中删除。
- 返回值:
- darray of floats
到最近邻的距离。如果
x
的形状为tuple+(self.m,)
,则d
的形状为tuple+(k,)
。当 k == 1 时,输出的最后一个维度被压缩。缺失的邻居用无限距离表示。- indarray of ints
self.data
中每个邻居的索引。如果x
的形状为tuple+(self.m,)
,则i
的形状为tuple+(k,)
。当 k == 1 时,输出的最后一个维度被压缩。缺失的邻居用self.n
表示。
注释
如果 KD 树是周期性的,则位置
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]]