2015-01-10 2 views
2

Я использую NetworkX для создания взвешенного графика (а не орграфа). Каждый узел имеет имя узла и ряд ребер, имеющих вес. Веса всегда положительные, ненулевые целые числа.NetworkX Получить степень узла с весами

То, что я пытаюсь сделать, это получить список кортежей, где каждый кортеж представляет собой узел на графике (по имени) и взвешенную степень узла.

я могу сделать что-то вроде этого:

the_list = sorted(my_graph.degree_iter(),key=itemgetter(1),reverse=True) 

Но это, кажется, не принимая взвешивание каждого узла во внимание. Каждый узел может иметь разный вес для каждого ребра (или они могут быть одинаковыми, нет способа узнать).

Нужно ли написать функцию для этого вручную? Я проходил через документы NetworkX и собираюсь пустым с помощью встроенного способа сделать это (но, возможно, я его не замечаю).

Если мне нужно написать функцию самостоятельно, я предполагаю, что использую метод size() с установленным флагом weight. Это, кажется, дает мне только сумму всех весов на графике.

Любая помощь очень ценится.

ответ

3

Вы можете использовать метод Graph.degree() с весом = ключевое слово так:

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)] 
+0

Благодаря Арик! Это точно. По какой-то причине я смотрел какую-то старую документацию NetworkX, которая использовала 'weighted = True', а не новый способ, о котором вы говорили. Очень ценим! – TheOriginalBMan

Смежные вопросы