scipy.spatial.cKDTree.query

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

查询最近邻域的kd-tree

参数
xARRAY_LIKE,最后一维自定义。m

要查询的点数组。

k整数或整数列表

要返回的第k个最近邻居的列表。如果k是整数,则将其视为 [1,.K] (范围(1,k+1))。请注意,计数从1开始。

eps非负浮点

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

p浮动,1<=p<=无穷大

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

distance_upper_bound非负浮点

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

workers整型,可选

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

在 1.6.0 版更改: “n_job”参数已重命名为“worker”。旧名称“n_job”已弃用,将停止在本网站1.8.0中工作。

退货
d浮点数组

到最近邻居的距离。如果 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]]