Articles

DiGraph-Directed graphs with self loops¶

Översikt¶

classDiGraph(incoming_graph_data=None, **attr)¶

Basisklass för riktade grafer.

En DiGraph lagrar noder och kanter med valfria data, eller attribut.

DiGraphs håller riktade kanter. Self loops är tillåtna, men flera (parallella) kanter är inte tillåtna.

Noder kan vara godtyckliga (hashable) Python-objekt med valfria nyckel/värde-attribut. Av konvention används None inte som nod.

Kanter representeras som länkar mellan noder med valfria nyckel/värdeattribut.

Parametrar

  • incoming_graph_data (indata graph (valfritt, standard: None)) – Data för att initialisera grafen. Om None (standard) skapas en tom graf. Data kan vara i vilket format som helst som stöds av funktionen to_networkx_graph(), för närvarande inklusive edge list, dict of dicts, dict of lists, NetworkX-graf, NumPy matrixor 2d ndarray, SciPy sparse matrix, eller PyGraphviz-graf.

  • attr (nyckelordsargument, valfritt (standard= inga attribut)) – attribut som ska läggas till grafen i form av nyckel=värdepar.

Se även

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Exempel

Skapa en tom grafstruktur (en ”nollgraf”) utan noder och utan kanter.

>>> G = nx.DiGraph()

G kan växa på flera sätt.

Noder:

Lägg till en nod i taget:

>>> G.add_node(1)

Lägg till noderna från vilken behållare som helst (en lista, dikt, uppsättning eller till och med rader från en fil eller noder från en annan graf).

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

Inom strängar och heltal kan alla hashbara Pythonobjekt (utom None) representera en nod, t.ex. ett anpassat nodobjekt, eller till och med en annan Graph.

>>> G.add_node(H)

Kanter:

G kan också växa genom att lägga till kanter.

Lägg till en kant,

>>> G.add_edge(1, 2)

En lista med kanter,

>>> G.add_edges_from()

eller en samling kanter,

>>> G.add_edges_from(H.edges)

Om vissa kanter förbinder noder som ännu inte finns i grafen, läggs noderna till automatiskt. Det finns inga fel när man lägger till noder eller kanter som redan finns.

Attribut:

Varje graf, nod och kant kan innehålla nyckel/värde-attributpar i ett associerat attributlexikon (nycklarna måste vara hashbara).Som standard är dessa tomma, men de kan läggas till eller ändras med hjälp avadd_edge, add_node eller genom direktmanipulering av attributlexikonet som heter graph, node respektive edge.

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

Lägg till nodattribut med hjälp av add_node(), add_nodes_from() eller G.nodes

Lägg till kantattribut med hjälp av add_edge(), add_edges_from(), subscriptnotation eller G.edges.

Skortkommandon:

Många vanliga graffunktioner tillåter pythonsyntax för att påskynda rapporteringen.

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

Ofta är det bästa sättet att gå igenom alla kanter i en graf via grannarna.Grannarna rapporteras som ett adjacency-dict G.adj eller 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

Men objektet för rapportering av kanter är ofta bekvämare:

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

Rapportering:

För detaljer om dessa och andra diverse metoder, se nedan.

Underklasser (avancerade):

Klassen Graph använder en dict-of-dict-of-dict-datastruktur. den yttre dict (node_dict) innehåller adjacensinformation med noden som nyckel. nästa dict (adjlist_dict) representerar adjacensinformation och holdsedge-data med granne som nyckel. Den inre dict (edge_attr_dict) representerar kantdata och innehåller värden för kantattribut med attributnamn som nyckel.

Varje av dessa tre dicts kan ersättas i en underklass av ett användardefinieratdictliknande objekt. I allmänhet bör de diktliknande funktionerna bibehållas, men extra funktioner kan läggas till. För att ersätta en av dikterna skapas en ny grafklass genom att ändra variabeln class(!) som innehåller fabriken för den diktliknande strukturen. Variabelns namn är arenode_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory, adjlist_outer_dict_factory, edge_attr_dict_dict_factory och graph_attr_dict_dict_factory.

node_dict_factoryfunction, (default: dict)

Fabriksfunktion som ska användas för att skapa en dikt som innehåller nodeattribut, nyckelade av nodens id.Den ska inte kräva några argument och återge ett diktliknande objekt

node_attr_dict_factory: function, (default: dict)

Fabrikfunktion som ska användas för att skapa noden attributedict som innehåller attributvärden med attributnamn som nyckel.Den bör inte kräva några argument och återge ett diktliknande objekt

adjlist_outer_dict_factoryfunktion, (default: dict)

Fabrikfunktion som ska användas för att skapa den yttersta dikt i datastrukturen som innehåller adjacency info med noden som nyckel.Den bör inte kräva några argument och återge ett diktliknande objekt.

adjlist_inner_dict_factoryfunction, optional (default: dict)

Fabriksfunktion som ska användas för att skapa adjacency listdict som innehåller kantdata med neighbor som nyckel.Den ska inte kräva några argument och återge ett diktliknande objekt

edge_attr_dict_factoryfunction, optional (default: dict)

Fabriksfunktion som ska användas för att skapa edge attributedict som innehåller attributvärden med attributnamn som nyckel.Den bör inte kräva några argument och återge ett diktliknande objekt.

graph_attr_dict_factoryfunction, (default: dict)

Fabriksfunktion som ska användas för att skapa grafen attributedict som innehåller attributvärden med attributnamn som nyckel.Den bör inte kräva några argument och återge ett diktliknande objekt.

Typiskt sett, om din utvidgning inte påverkar datastrukturen, kommer alla metoder att gå i arv utan problem, utom: to_directed_classcallable, (standard: DiGraph eller MultiDiGraph)

Klass för att skapa en ny grafstruktur i to_directed-metoden.Om None används en NetworkX-klass (DiGraph eller MultiDiGraph).

to_undirected_classcallable, (default: Graph eller MultiGraph)

Klass för att skapa en ny grafstruktur i to_undirected-metoden.Om None används en NetworkX-klass (Graph eller MultiGraph).

Exempel

Skapa en grafklass med lågt minne som i praktiken inte tillåter kantattribut genom att använda en enda attributdikt för alla kanter.Detta minskar minnesförbrukningen, men du förlorar kantattributen.

Se ordered för fler exempel på hur man kan skapa underklasser till grafer genom att skriva över basklassen dict med ett ordboksliknande objekt.

Lämna ett svar

Din e-postadress kommer inte publiceras.