Python:查找点和返回点之间的所有成对距离以及距离

时间:2016-12-09 09:50:21

标签: list python-3.x numpy scipy

我有一个列表,其中包含名称和坐标为3D的点列表。这样的事情有一个更大的列表长度

group=[[gr1, 5, 8, 9], [gr2, 7, 4, 5], [gr3, 3, 8, 1], [gr4, 3, 4, 8]]

我想在坐标中计算所有可能的成对距离,并返回距离以及相应的点。这样的事情:

distances=[[gr1, gr2, 6.],[gr1, gr3, 8.24621125], [gr1, gr4, 4.58257569], [gr2, gr3, 6.92820323], [gr2, gr4, 5.], [gr3, gr4, 8.06225775]]

我尝试过使用scipy.spatial.distance.pdist,但这只会让我回复

array([ 6.        ,  8.24621125,  4.58257569,  6.92820323,  5.        ,
    8.06225775]) 

如何提取信息以及为每个距离值考虑的组

我是初学者,我正在使用python 3.谢谢

1 个答案:

答案 0 :(得分:0)

也许你可以尝试两个嵌套的for循环来组合“group”中的每个元素,除了最后一个元素与右边的每个其他元素:

group=[["gr1", 5, 8, 9], ["gr2", 7, 4, 5], ["gr3", 3, 8, 1], ["gr4", 3, 4, 8]]

distances=[]

for i,g in enumerate(group[:-1]):
    for h in group[i+1:]:
        d = ((g[1]-h[1])**2+(g[2]-h[2])**2+(g[3]-h[3])**2)**0.5
        distances.append([g[0],h[0],d])

print(*distances,sep="\n")

结果:

['gr1', 'gr2', 6.0]
['gr1', 'gr3', 8.246211251235321]
['gr1', 'gr4', 4.58257569495584]
['gr2', 'gr3', 6.928203230275509]
['gr2', 'gr4', 5.0]
['gr3', 'gr4', 8.06225774829855]