2013-08-15 8 views
5

W sieci biblioteki Pythona chciałbym usunąć węzły i krawędzie wykresu, które mają pewne właściwości. Na przykład, załóżmy, że chciałem, aby usunąć wszystkie węzły i krawędzie, w których stopień węzła było < 2. Rozważmy następującą psuedocode:Python networkx usunąć węzły i krawędzie z pewnym warunkiem

vdict = g.degree_dict()   #dictionary of nodes and their degrees 
g.remove_from_nodes(v in g s.t. vdict[v] < 2) 

Widziałem kilka składni, który używa zestawu notacji teorii, ale jak jestem jeszcze nowy pytonowi nie wiem jak z niego korzystać. Jak przekonwertować to do działającego kodu Pythona?

Odpowiedz

1

Jeśli mamy zainicjowanego wykres g dodaje ustawi f być g podlega ograniczeniu, że każdy wierzchołek musi mieć stopień> 0. Możemy łatwo uogólnić 0 ze zmienną:

f = nx.Graph()                                  
fedges = filter(lambda x: g.degree()[x[0]] > 0 and g.degree()[x[1]] > 0, g.edges()) 
f.add_edges_from(fedges) 
8

Metoda Graph.remove_nodes_from() pobiera listę (faktycznie kontenera) węzłów. Musisz więc stworzyć listę, która spełni twój warunek. Możesz użyć struktury Pythona o nazwie list comprehension, aby utworzyć spójną listę węzłów do usunięcia.

In [1]: import networkx as nx 

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

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

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

In [5]: G.add_edge(1,4) 

In [6]: G.add_edge(2,3) 

In [7]: G.add_edge(2,4) 

In [8]: G.degree() 
Out[8]: {1: 3, 2: 3, 3: 2, 4: 2} 

In [9]: remove = [node for node,degree in G.degree().items() if degree > 2] 

In [10]: remove 
Out[10]: [1, 2] 

In [11]: G.nodes() 
Out[11]: [1, 2, 3, 4] 

In [12]: G.remove_nodes_from(remove) 

In [13]: G.nodes() 
Out[13]: [3, 4] 
+0

Czy możesz dodać małe wyjaśnienie języka set theory, w którym zainicjowałeś 'remove', ponieważ wcześniej nie użyłem tego konstruktu językowego? – CodeKingPlusPlus

+0

Dodałem łącze do dokumentacji Pythona w celu sprawdzenia listy. – Aric

+0

Dzięki, muszę znać właściwy termin. – CodeKingPlusPlus

Powiązane problemy