我有一个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。例如,找到第一个点与所有其他点之间的距离,然后找到第二个点与其余点(不包括第一个点)之间的距离,依此类推。理想情况下,以有效且可扩展的方式保留点的顺序。一旦找到距离,我便要查询它们。例如找到一定范围内的距离,并能够输出与这些距离相对应的点。
答案 0 :(得分:1)
一般来说,您希望使用query_pairs
的KDTree
实现。
from scipy.spatial import KDTree
points_tree = KDTree(points)
points_in_radius = points_tree.query_pairs(radius)
这比实际计算所有实例并应用公差要快得多。