2013-06-04 14 views
5

Si può facilmente estrarre un sottografo da un grafico NetworkX specificando un elenco di nodi, ma non sono riuscito a trovare un modo efficiente per eseguire l'estrazione del sottografo per fronte. Ad esempio, per estrarre il sottografo è costituito da spigoli con pesi che superano alcune soglie definite dall'utente.Estrazione efficiente di un sottografo secondo alcuni attributi del bordo in NetworkX

Attualmente lo sto facendo nel modo seguente:

## 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) 

C'è un modo migliore per fare questo?

Grazie per le vostre risposte gentili.

risposta

5

Sembra la soluzione migliore.

È possibile risparmiare memoria utilizzando Graph.edges_iter() anziché Graph.edges(), ad es.

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

Grande, grazie per il suggerimento di risparmio di memoria! –

Problemi correlati