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

3

我有一个列表,其中包含具有名称和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个回答

1
也许您可以尝试使用两个嵌套的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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接