2013-04-19 4 views
2

У меня есть направленный мультиграфик с весами. Кромка добавление выглядит какПолучение верхних n ребер в графике networkx

g.add_edge(source_a,source_b, weight= some_Weight) 

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

1,2,0.5 
1,2,0.6 
1,2,0.4 
1,3,0.5 
... 

Я хочу видеть только два верхних края между ними. Поверху я имею в виду, края с верхними весами. Так что вывод будет что-то вроде

1,2,0.6 
1,2,0.5 
1,3,0.5 

Я удаление остальных краев. Как это сделать, используя python/networkx?

+0

Определить второе место: первые два добавлены? Два с наибольшим весом, оставляя определенный узел? – Crisfole

+0

отредактировал :) спасибо – Fraz

+0

Не будет ли проще фильтровать данные перед построением графика? Вы можете использовать что-то вроде 'itertools.groupby', чтобы сделать грязную работу для вас. – YXD

ответ

4

Вы можете просто перебирать по краям с определенным атрибутом:

import networkx as nx 

G = nx.MultiGraph() 
G.add_edge(1,2,weight=.5) 
G.add_edge(1,2,weight=.6) 
G.add_edge(1,2,weight=.4) 
G.add_edge(1,3,weight=.5) 

cutoff = .45 

top = [edge for edge in G.edges_iter(data=True) 
     if edge[2]['weight'] > cutoff] 

print top 

Это дает:

[(1, 2, {'weight': 0.5}), (1, 2, {'weight': 0.6}), (1, 3, {'weight': 0.5})] 

Отсюда было бы просто создать новый граф только с этими краями.

G2 = nx.MultiGraph(top) 
Смежные вопросы