2017-11-26 7 views
1

Ich habe ein Wörterbuch mit Knoten:Vertrag eine Liste von Knoten in NetworkX

supernodes = list(nx.connected_components(G1)) 

das Ergebnis print(supernodes) ist:

[{1, 2, 3, 5}, {8, 6}, {7, 9, 10, 12, 13}, {4}, {11}, {14}, {15}] 

wie kann ich jede Liste zu einem Knoten zusammenführen? Ich fand diese Funktion nx.contracted_nodes(G, (1, 3)), aber wie kann ich setzen {1,2,3,5}, {8,6} etc und erstellen Sie die 7 Vertragsknoten?

+0

Was möchten Sie zu Ihrer Ausgabe sein? Es ist nicht klar, wie Sie die kontrahierten Knoten darstellen möchten. – Imran

+0

@Imran der Ausgang Ich möchte ein Diagramm mit 7 Knoten sein. Ein Knoten für '{1, 2, 3, 5}', ein Knoten für '{8, 6}', einer für '{7, 9, 10, 12, 13}', einer für '{4}' etc –

Antwort

2

Sie können dies versuchen:

import networkx as nx 
# Preamble, define G1 

supernodes = list(nx.connected_components(G1)) 
# contract nodes 
for supernode in supernodes: 
    nodes = sorted(list(supernode)) 
    for node in nodes[1:]: 
     G1 = nx.contracted_nodes(G1, nodes[0], node) 

Jeder Knoten x in G1 entspricht dem Supernode x als kleinere Element. Wenn Sie die Eigenschleifen entfernen möchten, schreiben Sie stattdessen nx.contracted_nodes(G1, nodes[0], node, self_loops=False).

+1

Der Code wird gut funktionieren ohne 'supernodes = list (nx.connected_components (G1)) 'Just do' für supernode in nx.connected_components (G1): ' – Joel

Verwandte Themen