在Python中使用scipy.spatial.KDTree()
返回两个数组:1.到向量列表中到最近点的距离; 2.列表中最近的向量的索引。
但是返回的距离是欧几里得距离。有没有办法返回给出欧几里得距离的各个分量?
例如:
import numpy as np
from scipy import spatial
a = np.round(np.random.uniform(0,10,(4,2)))
a
Out[171]:
array([[2., 8.],
[8., 1.],
[6., 9.],
[3., 6.]])
f_test = np.array([8.,1.1])
tree = spatial.KDTree(a)
distances, indices = tree.query(f_test)
distances
Out[169]: 0.10000000000000009
indices
Out[170]: 1
这里我想要的distances
的输出为[0.,0.1]
,即f_test
到a
中最近的矢量的距离,但以元素的方式。
注意:
这是一个简单的示例,其中我仅将一个向量与向量的2D数组进行了比较,但实际上我想返回新f_test
(这是测试向量的2D数组)的最小全向量距离。到原始数组a
。否则,这将是一个简单的问题,即从f_test
中减去a
之后找到最小的分量。
例如如果:
f_test = np.array([[8.,1.1],[6.,9.2]])
然后我想以distances
的身份返回np.array([[0.,0.1],[0.,0.2]])
KDTree
允许快速计算矢量数组的最小距离而没有循环,因此为什么在这里以它为例进行说明。
链接到KDTree
文档:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.KDTree.html