我有一个列表,其中包含名称和坐标为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.谢谢
答案 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]