scipy.spatial.cKDTree.

query#

cKDTree.query(self, x, k=1, eps=0, p=2, distance_upper_bound=np.inf, workers=1)#

查询 kd 树以获取最近邻居

参数:
xarray_like, 最后一个维度 self.m

要查询的点的数组。

k整数列表或整数

要返回的第 k 个最近邻居的列表。如果 k 是一个整数,它被视为列表 [1, … k] (range(1, k+1))。请注意,计数从 1 开始。

eps非负浮点数

返回近似最近邻居;保证返回的第 k 个值不大于到实际第 k 个最近邻居的距离的 (1+eps) 倍。

p浮点数, 1<=p<=无穷大

要使用的闵可夫斯基 p 范数。1 是绝对值之和“曼哈顿”距离,2 是通常的欧几里得距离,无穷大是最大坐标差距离。如果可能发生溢出,则有限的较大的 p 可能会导致 ValueError。

distance_upper_bound非负浮点数

仅返回此距离内的邻居。这用于修剪树搜索,因此如果您正在进行一系列最近邻查询,则可能有助于提供到最近点最近邻居的距离。

workersint, 可选

用于并行处理的工作线程数。如果给定 -1,则使用所有 CPU 线程。默认值:1。

在版本 1.9.0 中更改:“n_jobs” 参数已重命名为 “workers”。旧名称 “n_jobs” 在 SciPy 1.6.0 中已弃用,并在 SciPy 1.9.0 中已删除。

返回:
d浮点数数组

到最近邻居的距离。如果 x 的形状为 tuple+(self.m,),则 d 的形状为 tuple+(k,)。当 k == 1 时,输出的最后一个维度被压缩。缺失的邻居用无限距离表示。

i整数的 ndarray

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