使用节点计算距离:(x,y)

时间:2018-04-16 14:19:05

标签: python nodes distance networkx

我非常非常陌生,需要帮助计算原点和图表中所有节点之间的欧氏距离。

具体来说,我无法弄清楚如何从我的数据中调用x和y坐标以在距离方程中使用它们。我正在使用node:(x,y)来添加具有位置的节点。

我的问题的一个简单示例如下。

    import networkx as nx
    import matplotlib.pyplot as plt
    import math

    g = nx.Graph()
    pos={
    1:(0,0),
    2:(5,5),
    3:(10,10)}
    g.add_nodes_from(pos)
    nx.draw(g,pos,with_labels=True)
    plt.show()

这绘制了我想要的点数。 以下部分是我无法弄清楚如何拉出坐标以用于等式的地方。

    distances={}
    origin = g.node(1)
    for node in g.nodes():
        distance[node]=round(math.sqrt(((origin[x]-node[x])**2)+ 
        ((origin[y]-node[y])**2)),2)

我知道“origin [x] -node [x]”是完全错误的,我只是说我需要来自我的节点x(x,y)数据结构。

谢谢!我知道这可能是一个简单的问题,但我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

x只是元组中的第一个值,在您的情况下为x = pos[node][0]。 然而,“解包”这些变量往往更具表现力和优雅:

x, y = pos[node] 

我会像这样重写你的代码:

distances = dict() # should probably be an array, but hey, its your code
origin = 1
(x0, y0) = pos[origin]
for node, (x1, y1) in pos.items():
    distances[(origin, node)] = math.sqrt((x0-x1)**2 + (y0-y1)**2)