【问题标题】:How to sum up a networkx graph's edge weights?如何总结networkx图的边权重?
【发布时间】:2021-02-16 02:09:01
【问题描述】:

我正在开发一个 networkx 图形项目。我的任务之一是找出两个节点之间的最短路径并总结权重。如您所见,我可以找到最短路径。但是,我不知道如何总结最短路径中每条边的权重。我认为包中会有一个简单的功能,但我没有找到。

import matplotlib.pyplot as plt
import networkx as nx

def graph(path):
    G = nx.Graph()
    for line in open(path):
        strlist = line.split(',')
        n1 = strlist[0].replace('.0', '')
        n2 = strlist[1].replace('.0', '')
        weight = round(float(strlist[2]), 2)
        G.add_weighted_edges_from([(n1, n2, weight)])

    # labels = dict((i, i) for i in G.nodes())
    # nx.draw_networkx_labels(G, pos=nx.spring_layout(G), labels=labels)
    # plt.savefig(filename)
    elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d["weight"] > 0.5]
    esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d["weight"] <= 0.5]
    pos = nx.spring_layout(G)
    # nodes
    nx.draw_networkx_nodes(G, pos, node_size=200, node_color='#ff0000', alpha=0.9)
    # edges
    nx.draw_networkx_edges(G, pos, edgelist=elarge, width=1, edge_color='b', alpha=0.05)
    nx.draw_networkx_edges(G, pos, edgelist=esmall, width=1, edge_color='b', alpha=0.3)
    edge_labels = nx.get_edge_attributes(G, 'weight')
    nx.draw_networkx_labels(G, pos, font_size=10, font_family="sans-serif")
    nx.draw_networkx_edge_labels(G, pos, edge_labels, font_size=8, font_family='sans-serif')
    plt.axis("off")
    plt.show()
    return G
G = graph('graph.csv')


shortest_value = nx.shortest_path_length(G, source='210', target='2771')
print(shortest_value)
shortest_path = nx.shortest_path(G, source='210', target='2771', method='dijkstra')
print('shortest path:{}'.format(shortest_path))
print('distance:{}'.format(shortest_value))

【问题讨论】:

    标签: python-3.x graph networkx


    【解决方案1】:

    使用networkx.Graph.size

    来自示例:

    >>> G = nx.Graph()  # or DiGraph, MultiGraph, MultiDiGraph, etc
    >>> G.add_edge("a", "b", weight=2)
    >>> G.add_edge("b", "c", weight=4)
    >>> G.size()
    2
    >>> G.size(weight="weight")
    6.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      相关资源
      最近更新 更多