Python:计算N维线的点距离

时间:2017-10-12 00:31:33

标签: python math

我有一堆4D点,我想要从线w = x = y = z获得它们的垂直距离(假设w,x,y,z为4D轴)。似乎在python中应该有一个简单的方法来做到这一点,但我似乎无法弄明白。

除此之外:这基本上是一个4D散点图,我试图看看每个点与理想情景的距离(w = x = y = z)。这个指标有数学术语吗?

2 个答案:

答案 0 :(得分:1)

任何直线都有参数方程,带有一些基点和单位方向矢量。这里P0=(0,0,0,0)u=(1/2, 1/2, 1/2, 1/2) 从基点到每个点的矢量P等于它们的坐标,从P到线的距离是:

 D = (P - (P.dot.u) * u).length

enter image description here

标量产品方法适用于任何维度。

答案 1 :(得分:0)

这是欧几里德距离的实现,适用于任意数量的维度

def distance_to_line(line, pts, l0=None, p0=None):
    """
    line defined between l0 and line 
    points defined between p0 and pts
    """
    # line origin other than (0,0,0,..)
    if l0 is not None:
        line = line-l0
    # points origin other than (0,0,0,..)
    if p0 is not None:
        pts = pts-p0
    dp = np.dot(pts,line)
    pp = dp/np.linalg.norm(line)
    pn = np.linalg.norm(pts, axis=1)
    return np.sqrt(pn**2 - pp**2)



distance_to_line(l0=np.transpose((0,0,0,0,0)),
                 line=np.transpose((1,1,0,0,0)),
                 pts=np.array([(2,0,0,0,1),
                               (1,1,0,0,1),
                               (0,1,0,0,1),
                               (1,2,0,0,1)]))

>>> array([ 1.73205081,  1.        ,  1.22474487,  1.22474487])