2016-07-11 14 views
2

Ich bin neu bei NetworkX und könnte mit etwas Hilfe bitte tun.So entfernen Sie kleine Komponenten aus einem Diagramm

Ich habe eine Reihe von Daten, die ich verarbeitet habe, um die Knoten und Kanten zu generieren. Es gibt ungefähr 5000 Gruppen von Knoten, die mehr als 2 Verbindungen in sich haben (bis zu 10 Knoten in der Gruppe insgesamt). Das Problem ist jedoch, dass es auch mehrere tausend Paare von Knoten gibt, die nur eine Kante zwischen ihnen haben, d. H. Knoten a ist mit Knoten b verbunden, aber keiner ist mit irgendeinem anderen Knoten verbunden.

Ich möchte diese paarweise Knoten aus dem Diagramm entfernen.

Gibt es eine Möglichkeit, diese herauszufiltern?

+0

Lassen Sie mich sehen, wenn ich verstehe: Sie haben ein Diagramm, 'G' und Sie möchten alle Knoten von' G' entfernen, die nicht Bestandteil von Komponenten von 3 oder mehr Knoten sind? – Joel

+0

Joel - das ist eine viel elegantere Art, das Problem zu beschreiben: genau das! –

+0

Ich habe den Titel bearbeitet, um ihn für andere Leute nützlicher zu machen, die dies über eine Suchmaschine finden können. Fühlen Sie sich frei zu ändern, wenn Sie nicht denken, dass ich es richtig geändert habe. – Joel

Antwort

2

Unser Ziel ist es also, alle Knoten aus Komponenten mit weniger als 3 Knoten zu entfernen (dies schließt isolierte Knoten ein, falls vorhanden).

for component in list(nx.connected_components(G)): 
    if len(component)<3: 
     for node in component: 
      G.remove_node(node) 

Eine kleine Warnung ist, um, wenn nx.connected_components verwenden. Es gibt eine generator von Komponenten zurück. Wenn ich nicht list um ihn herum legte, würde es einzeln nacheinander generieren und dann die Schritte für die angegebene Komponente ausführen. Sobald das alles erledigt ist, würde es die nächste Komponente erzeugen. Aber weil G geändert wurde, kann Python nicht sicher sein, dass dies gut funktioniert. So würde es sterben (beschweren, dass ein Wörterbuch die Größe geändert hat --- die Anzahl der Knoten in G geändert). Wenn Sie eine Liste erstellen, werden alle Komponenten gefunden, bevor die Schleife gestartet wird. Daher wird sich das Diagramm nicht ändern, während die Komponenten gefunden werden.

+0

Das ist brilliant - so vielen Dank. würde stimmen, wenn ich könnte. –