scipy.spatial.KDTree.

query#

KDTree.query(x, k=1, eps=0, p=2, distance_upper_bound=inf, workers=1)[source]#

查询 kd-tree 以查找最近邻居。

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

要查询的点数组。

kint 或 Sequence[int],可选

要返回的最近邻居的数量,或要返回的第 k 个最近邻居的列表,从 1 开始。

eps非负浮点数,可选

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

pfloat, 1<=p<=infinity, optional

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

distance_upper_bound非负浮点数,可选

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

workersint,可选

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

1.6.0 版本中新增。

返回值:
dfloat 或浮点数组

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

1.9.0 版本已更改:以前如果 k=None,则 d 是形状为 tuple 的对象数组,包含距离列表。 此行为已被删除,请改用 query_ball_point

i整数或整数数组

self.data 中每个邻居的索引。i 的形状与 d 相同。 丢失的邻居用 self.n 表示。

示例

>>> import numpy as np
>>> from scipy.spatial import KDTree
>>> x, y = np.mgrid[0:5, 2:8]
>>> tree = KDTree(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]]