NetworkX获取应用权重的节点度数

9
我正在使用NetworkX创建一张加权图(不是有向图)。每个节点都有一个节点名称以及若干条边,每条边都有一个权重。权重始终为正的非零整数。
我想做的事情是得到一个元组列表,其中每个元组表示图中某个节点(由名称表示)及其带权度数。
可以尝试这样操作:
the_list = sorted(my_graph.degree_iter(),key=itemgetter(1),reverse=True)

但是这似乎没有考虑每个节点的权重。每个节点可能对每条边都有不同的权重(或者它们可能相同,无法知道)。
我需要手动编写一个函数吗?我已经查看了NetworkX文档,并没有内置的方法可以做到这一点(但也许我正在忽略它)。
如果我必须自己编写函数,我假设我使用带有weight标志的size()方法。然而,那似乎只会给我图中所有权重的总和。
非常感谢任何帮助。
1个回答

15
您可以使用Graph.degree()方法,带有weight=关键字,如下所示:
In [1]: import networkx as nx

In [2]: G = nx.Graph()

In [3]: G.add_edge(1,2,weight=7)

In [4]: G.add_edge(1,3,weight=42)

In [5]: G.degree(weight='weight')
Out[5]: {1: 49, 2: 7, 3: 42}

In [6]: G.degree(weight='weight').items()
Out[6]: [(1, 49), (2, 7), (3, 42)]

它适用于DiGraphs中的in_degree和out_degree吗?是否可以使用节点或边缘数据的函数作为权重? - alancalvitti

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