2013-06-04 12 views
5

Można łatwo wyodrębnić podgraph z wykresu NetworkX, określając listę węzłów, ale nie mogłem znaleźć wydajnego sposobu wykonywania ekstrakcji w podgraphu po krawędzi. Na przykład, aby wyodrębnić podgraf składa się z krawędzi o wadze przekraczającej pewien zdefiniowany przez użytkownika próg.Wydajne wyodrębnianie podgraphu według pewnego atrybutu krawędzi w NetworkX

Obecnie robię to w następujący sposób:

## extracts all edges satisfy the weight threshold (my_network is directed): 
eligible_edges = [(from_node,to_node,edge_attributes) for from_node,to_node,edge_attributes in my_network.edges(data=True) if edge_attributes['weight'] > threshold] 
new_network = NetworkX.DiGraph() 
new_network.add_edges_from(eligible_edges) 

Czy istnieje lepszy sposób to zrobić?

Dzięki za życzliwe odpowiedzi.

Odpowiedz

5

To wygląda na najlepsze rozwiązanie.

Możesz zapisać pamięć za pomocą Graph.edges_iter() zamiast Graph.edges(), np.

>>> G = nx.DiGraph(((source, target, attr) for source, target, attr in my_network.edges_iter(data=True) if attr['weight'] > threshold)) 
+0

Świetne, dziękuję za pamięć o oszczędzaniu pamięci! –

Powiązane problemy