Articles

DiGraph-Directed graphs with self loops¶

Übersicht¶

classDiGraph(incoming_graph_data=None, **attr)¶

Basisklasse für gerichtete Graphen.

Ein DiGraph speichert Knoten und Kanten mit optionalen Daten oder Attributen.

DiGraphen enthalten gerichtete Kanten. Selbstschleifen sind erlaubt, aber mehrfache (parallele) Kanten nicht.

Knoten können beliebige (hashable) Python-Objekte mit optionalen Schlüssel/Wert-Attributen sein. Konventionell wird None nicht als Knoten verwendet.

Kanten werden als Verbindungen zwischen Knoten mit optionalen Schlüssel/Wert-Attributen dargestellt.

Parameter

  • incoming_graph_data (input graph (optional, Standard: None)) – Daten zur Initialisierung des Graphen. Wenn keine (Voreinstellung), wird ein leerer Graph erstellt. Die Daten können in jedem Format vorliegen, das von der Funktion to_networkx_graph() unterstützt wird, derzeit einschließlich Kantenliste, Diktat von Dikten, Diktat von Listen, NetworkX-Graph, NumPy-Matrix oder 2d-Ndarray, SciPy-Sparse-Matrix oder PyGraphviz-Graph.

  • attr (Schlüsselwortargumente, optional (Standardwert= keine Attribute)) – Attribute, die dem Graphen als Schlüssel=Wert-Paare hinzugefügt werden.

Siehe auch

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Beispiele

Erstelle eine leere Graphenstruktur (ein „Null-Graph“) ohne Knoten und Kanten.

>>> G = nx.DiGraph()

G kann auf verschiedene Arten wachsen.

Knoten:

Einen Knoten nach dem anderen hinzufügen:

>>> G.add_node(1)

Die Knoten aus einem beliebigen Container (eine Liste, ein Diktat, eine Menge oder sogar die Zeilen aus einer Datei oder die Knoten aus einem anderen Graphen) hinzufügen.

>>> G.add_nodes_from()>>> G.add_nodes_from(range(100, 110))>>> H = nx.path_graph(10)>>> G.add_nodes_from(H)

Neben Strings und Integers kann jedes hashfähige Python-Objekt (außer None) einen Knoten repräsentieren, z.B. ein benutzerdefiniertes Knotenobjekt oder sogar ein anderer Graph.

>>> G.add_node(H)

Kanten:

G kann auch durch Hinzufügen von Kanten erweitert werden.

Eine Kante hinzufügen,

>>> G.add_edge(1, 2)

eine Liste von Kanten,

>>> G.add_edges_from()

oder eine Sammlung von Kanten,

>>> G.add_edges_from(H.edges)

Wenn einige Kanten Knoten verbinden, die noch nicht im Graphen sind, werden die Knoten automatisch hinzugefügt. Es gibt keine Fehler beim Hinzufügen von bereits existierenden Knoten oder Kanten.

Attribute:

Jeder Graph, Knoten und jede Kante kann Schlüssel/Wert-Attributpaare in einem zugehörigen Attributwörterbuch enthalten (die Schlüssel müssen hashfähig sein).Standardmäßig sind diese leer, können aber mitadd_edge, add_node oder durch direkte Manipulation der Attributwörterbücher namens graph, node bzw. edge hinzugefügt oder geändert werden.

>>> G = nx.DiGraph(day="Friday")>>> G.graph{'day': 'Friday'}

Hinzufügen von Knotenattributen mit add_node(), add_nodes_from() oder G.nodes

Hinzufügen von Kantenattributen mit add_edge(), add_edges_from(), subscriptnotation, oder G.edges.

Shortcuts:

Viele gängige Graphenfunktionen erlauben eine Python-Syntax zur Beschleunigung der Auswertung.

>>> 1 in G # check if node in graphTrue>>> # iterate through nodes>>> len(G) # number of nodes in graph5

Oft ist der beste Weg, alle Kanten eines Graphen zu durchlaufen, über die Nachbarn.Die Nachbarn werden als Adjazenz-Diagramm G.adj oder G.adjacency()

>>> for n, nbrsdict in G.adjacency():... for nbr, eattr in nbrsdict.items():... if "weight" in eattr:... # Do something useful with the edges... pass

Aber das Objekt Kanten melden ist oft bequemer:

>>> for u, v, weight in G.edges(data="weight"):... if weight is not None:... # Do something useful with the edges... pass

Melden:

Details zu diesen und anderen verschiedenen Methoden siehe unten.

Unterklassen (Fortgeschrittene):

Die Graph-Klasse verwendet eine Dict-of-Dict-of-Dict-Datenstruktur: Das äußere Dict (node_dict) enthält Adjazenz-Informationen, die durch den Knoten verschlüsselt werden, das nächste Dict (adjlist_dict) stellt die Adjazenz-Informationen dar und enthält Kanten-Daten, die durch den Nachbarn verschlüsselt werden. Das innere Dict (edge_attr_dict) repräsentiert die Randdaten und enthält Randattributwerte, die durch Attributnamen verschlüsselt sind.

Jedes dieser drei Dicts kann in einer Unterklasse durch ein benutzerdefiniertesdict-ähnliches Objekt ersetzt werden. Im Allgemeinen sollten die dict-ähnlichen Eigenschaften beibehalten werden, aber es können zusätzliche Eigenschaften hinzugefügt werden. Um eines der Diktate zu ersetzen, erstellen Sie eine neue Diagrammklasse, indem Sie die Variable class(!) ändern, die die Fabrik für diese diktatähnliche Struktur enthält. Die Variablennamen sind node_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory, adjlist_outer_dict_factory, edge_attr_dict_factory und graph_attr_dict_factory.

node_dict_factoryfunction, (default: dict)

Fabrikfunktion, die verwendet wird, um das dict zu erstellen, das Knotenattribute enthält, die durch die Knoten-ID verschlüsselt werden.Sie sollte keine Argumente erfordern und ein dict-ähnliches Objekt zurückgeben

node_attr_dict_factory: function, (default: dict)

Fabrikfunktion, die verwendet wird, um das Knotenattributict zu erzeugen, das Attributwerte enthält, die durch den Attributnamen verschlüsselt sind.Sie sollte keine Argumente benötigen und ein Diktat-ähnliches Objekt zurückgeben

adjlist_outer_dict_factoryfunction, (default: dict)

Fabrikfunktion, die verwendet wird, um das äußerste Diktat in der Datenstruktur zu erstellen, das die durch den Knoten verschlüsselten Adjazenzinformationen enthält. Sie sollte keine Argumente benötigen und ein Diktat-ähnliches Objekt zurückgeben.

adjlist_inner_dict_factoryfunction, optional (Standard: dict)

Fabrikfunktion, die verwendet wird, um das Adjazenzlistendict zu erstellen, das die durch den Nachbarn geschlüsselten Kantendaten enthält.Sie sollte keine Argumente erfordern und ein diktatähnliches Objekt zurückgeben

edge_attr_dict_factoryfunction, optional (Standard: dict)

Fabrikfunktion, die verwendet wird, um das Kantenattributdict zu erstellen, das die durch den Attributnamen geschlüsselten Attributwerte enthält.Sie sollte keine Argumente benötigen und ein Diktat-ähnliches Objekt zurückgeben.

graph_attr_dict_factoryfunction, (Standard: dict)

Fabrikfunktion, die verwendet wird, um den Graph attributedict zu erstellen, der Attributwerte enthält, die durch den Attributnamen verschlüsselt werden.

Typischerweise werden alle Methoden ohne Probleme vererbt, wenn Ihre Erweiterung keine Auswirkungen auf die Datenstruktur hat, außer: to_directed/to_undirectedStandardmäßig erstellen diese Methoden eine DiGraph/Graph-Klasse, und Sie möchten wahrscheinlich, dass sie Ihre Erweiterung eines DiGraph/Graphs erstellen. Um dies zu erleichtern, definieren wir zwei Klassenvariablen, die Sie in Ihrer Unterklasse setzen können.

to_directed_classcallable, (Standard: DiGraph oder MultiDiGraph)

Klasse, um eine neue Diagrammstruktur in der to_directedMethode zu erstellen.Wenn None, wird eine NetworkX-Klasse (DiGraph oder MultiDiGraph) verwendet.

to_undirected_classcallable, (Standardwert: Graph oder MultiGraph)

Klasse zum Erstellen einer neuen Graphenstruktur in der Methode to_undirected.Wenn None, wird eine NetworkX-Klasse (Graph oder MultiGraph) verwendet.

Beispiele

Erstellen Sie eine Graphenklasse mit geringem Speicherbedarf, die effektiv Kantenattribute verbietet, indem Sie ein einziges Attributdict für alle Kanten verwenden.

Siehe ordered für weitere Beispiele zum Erstellen von Graphenunterklassen durch Überschreiben der Basisklasse dict mit einem wörterbuchartigen Objekt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.