Ich habe eine NetworkX Grafik. Ich würde gerne wissen, wie man edge contraction zwischen mehreren Knoten macht.Python networkx: Kantenkontraktion
Zum Beispiel, wenn ich will, X, Y und Z zu kontrahieren:
_ node A _
_/ | \_
node X --- node Y --- node Z
würden
node A
|
node XYZ (or whatever X/Y/Z)
Graph Schöpfung ist nicht das Problem. Es klappt. Ich möchte den Graphen reduzieren, indem ich Knoten zusammenfasse, die die gleiche "Bedeutung" haben: Knoten, die ich "end lvl" nenne (Länge des Knotennamens ist gleich 7) und die miteinander verbunden sind.
ich die Kondensationsfunktion in NetworkX gefunden haben, so habe ich versucht, es zu benutzen:
# edge contraction for same nodes
# for each node, get the links to other nodes "end lvl"
# if there is such a link, it means that these node are
# the sames
#
# copy graph
I = G
for n,d in G.nodes(data=True):
if n in I.nodes():
if len(n) == 7:
# list of nodes adjacent to n : filter only "end lvl" nodes
neighbors = [ node for node in I.neighbors(n) if len(node) == 7 ]
nodes_to_merges = neighbors.append(n)
I = nx.condensation(I,scc=nodes_to_merges)
Das, was ich bekam, als ich zu JSON konvertieren ist:
{"directed": true, "graph": [], "nodes": [{"id": 0}], "links": [], "multigraph": false}
Es gibt ein Problem, wie Sie kann sehen ...
Referenz auf Funktionen sind here.
Eine Lösung wäre, es manuell mit einer Diktatdarstellung (to_dict_of_dicts) zu tun. – keyser
Ok, Graphen kenne ich nicht, aber ich sollte meine Frage verbessern, wie @zodiac mich fragte. Hier kommt es. – user1254498
Was machen die Funktionen nodes(), neighbors() und condensation()? Was ist Nx? – xuanji