找到点到轴的距离

时间:2014-04-16 07:57:34

标签: python numpy linear-algebra

我在3D笛卡尔空间中有一个点数组:

P = np.random.random((10,3))

现在我想找到它们到给定轴和给定轴的距离

Ax_support = array([3,2,1])
Ax_direction = array([1,2,3])

我找到了一个解决方案,首先从垂直于方向向量的每个点找到向量...然而,我觉得它真的很复杂,对于这样一个标准问题,会有一个numpy或scipy例程已经存在(因为在scipy.spatial.distance中找到点之间的距离)

1 个答案:

答案 0 :(得分:1)

我很惊讶在numpy / scipy的标准操作中看到这样的操作。你要找的是你线上的投影距离。首先减去Ax_support

P_centered = P - Ax_support

从0到方向Ax_direction的线上的点与L2中意义上与P_centered的每个元素的最短距离由

给出
P_projected = P_centered.dot(np.linalg.pinv(
             Ax_direction[np.newaxis, :])).dot(Ax_direction[np.newaxis, :])

因此,您正在寻找的公式是

distances = np.sqrt(((P_centered - P_projected) ** 2).sum(axis=1))

是的,这正是你提出的建议,以矢量化的方式做事,所以对于相当多的数据点它应该非常快。

注意:如果有人知道内置功能,我会非常感兴趣!