如何找到矩阵中各点之间没有重复的所有距离?

时间:2019-06-13 13:17:56

标签: python-3.x numpy scipy

我有一个Nx3矩阵,其中包含3D空间中N个点的x,y,z坐标。我想找到所有重复点之间的绝对距离。

我尝试使用scipy.spatial.distance.cdist() [请参见此处的文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html]。但是,输出矩阵包含距离的重复项。例如,点P1和P2之间的距离被计算为从P1到P2的距离的两倍,并且再次被计算为从P2到P1的距离。查看代码输出:

>>> from scipy.spatial import distance
>>> points = [[1, 2, 3],
...           [4, 5, 6],
...           [7, 8, 9]]
>>> distances = distance.cdist(points, points, 'euclidean')
>>> print(distances)
[[ 0.          5.19615242 10.39230485]
 [ 5.19615242  0.          5.19615242]
 [10.39230485  5.19615242  0.        ]]

我希望输出不包含dupilcates。例如,找到第一个点与所有其他点之间的距离,然后找到第二个点与其余点(不包括第一个点)之间的距离,依此类推。理想情况下,以有效且可扩展的方式保留点的顺序。一旦找到距离,我便要查询它们。例如找到一定范围内的距离,并能够输出与这些距离相对应的点。

1 个答案:

答案 0 :(得分:1)

一般来说,您希望使用query_pairsKDTree实现。

from scipy.spatial import KDTree
points_tree = KDTree(points)
points_in_radius = points_tree.query_pairs(radius)

这比实际计算所有实例并应用公差要快得多。