计算多个位置之间的距离

这是视频跟踪的每一帧的位置坐标,我想计算每一帧中这是个位置之间的距离,a和bcde……,b和cdefg……等等,这些距离怎么用什么方法可以快捷的计算呢

frame pos_x pos_y id
3 240.9812207 216.6666667 A
3 213.2910798 264.4507042 B
3 320.9071038 153.8032787 C
3 369.5783133 103.0321285 D
3 222.9590164 317.7704918 E
3 307.5813333 275.0133333 F
3 220.7287582 356.496732 G
3 578.7672414 215.0689655 H
3 603.3876812 329.0289855 I
3 672.2820513 508.0512821 J
4 240.9371981 216.9758454 A
4 212.7810945 266.6567164 B
4 321.0215054 153.8629032 C
4 370.02 102.16 D
4 222.9677419 317.6774194 E
4 307.5645161 274.9516129 F
4 220.7293729 356.5379538 G
4 578.8220339 214.9915254 H
4 603.7430556 328.28125 I
4 674.3900709 509.4680851 J

用Numpy吧。以题主的ABCDE等5个点为例,计算C点与其他点的距离:

>>> import numpy as np
>>> ps = np.array([
    [240.9812207,216.6666667], 
    [213.2910798,264.4507042],
    [320.9071038,153.8032787],
    [369.5783133,103.0321285],
    [222.9590164,317.7704918]
])
>>> delta = ps - ps[2]
>>> d = np.hypot(delta[:,0], delta[:,1])
>>> d # 这是C点和其他点(包括C点自身)的距离
array([101.6855562 , 154.35044992,   0.        ,  70.33204339,
       190.99496014])
>>> np.argsort(d) # 按距离排序的索引号
array([2, 3, 0, 1, 4], dtype=int64)