我正在比较元组列表中的坐标,如何比较它们以获得从一个节点到所有其他节点的所有距离?我认为使用随机发生器可能很棒,但我不知道它是如何工作的。
我正在开发一个程序,该程序使用从先前图像的所有灰度级创建的二值化图像,根据图像生成节点。 我已经有创建这些节点的代码,并将位置添加为图像中检测到的带标签对象的质心。 从以前的作品中我知道我必须得到五个节点,但是我得到12个节点。 我以为我必须收缩那些距离太近的节点,但是我的代码无法完成工作,因为我彼此之间仍然有节点。
def RegroupNodes(G,pos):
contr=[]
loneCc=[]
valuep=pos.values()
i=0
coorx=[x for x,y in valuep]
coory=[y for x,y in valuep]
for i in range(len(coorx)-1):
if abs(coorx[i]-coorx[i+1]) <=2 and abs(coory[i]-coory[i+1]) <=2:
contr1=[clep for clep,val in pos.items() if val==(coorx[i],coory[i])]
contr.append(contr1)
contr2=[clep for clep,val in pos.items() if val==(coorx[i+1],coory[i+1])]
contr.append(contr2)
G = nx.contracted_nodes(G,contr2[0],contr1[0])
i += 1
else:
loneCc1=[clep for clep,val in pos.items() if val==(coorx[i],coory[i])]
loneCc.append(loneCc1)
i += 1
for i in contr:
for j in loneCc:
if i==j:
loneCc.remove(j)
pos= nx.get_node_attributes(G, 'pos')
print('Lonely Node',loneCc)
return G, pos
我现在知道这个结果:
G ['Node1', 'Node2', 'Node3', 'Node4', 'Node5', 'Node6', 'Node7', 'Node8', 'Node9', 'Node10', 'Node11', 'Node12']
valuep dict_values([(24.23526918185672, 23.966935142009326), (24.110037799244015, 23.982780344393113), (33.02777777777778, 27.980555555555554), (30.56160458452722, 27.173352435530084), (19.166666666666668, 20.05), (33.02777777777778, 27.980555555555554), (37.029411764705884, 24.623529411764707), (19.166666666666668, 20.05), (33.02777777777778, 27.980555555555554), (19.392857142857142, 20.5), (24.04, 34.44), (37.029411764705884, 24.623529411764707)])
我得到了那些具有自己坐标的节点,例如'Node8':( 19.166666666666668,20.05)和'Node10':( 19.392857142857142,20.5)应该已经收缩了,但前提是它们在我的图。
我现在不确定如何在stackoverflow上共享我的代码,如果这样做不是正确的方法,我感到抱歉。如果你问我,我会改变。 感谢您提供的任何建议