Articles

DiGraph-Direkte grafer med selvsløjfer¶

Overblik¶

classDiGraph(incoming_graph_data=None, **attr)¶

Basisklasse for dirigerede grafer.

En DiGraph gemmer knuder og kanter med valgfrie data, eller attributter.

DiGraphs indeholder dirigerede kanter. Selvsløjfer er tilladt, men flere (parallelle) kanter er ikke tilladt.

Noder kan være vilkårlige (hashable) Python-objekter med valgfrie key/value-attributter. Ved konvention None bruges ikke som en node.

Kanter repræsenteres som links mellem noder med valgfrie nøgle/værdi-attributter.

Parametre

  • incoming_graph_data (input graph (valgfri, standard: None)) – Data til initialisering af grafen. Hvis None (standard) oprettes en tomgraf. Dataene kan være ethvert format, der understøttes af funktionen to_networkx_graph(), i øjeblikket herunder kantliste, dict of dicts, dict of lists, NetworkX-graf, NumPy-matrixeller 2d ndarray, SciPy sparse matrix eller PyGraphviz-graf.

  • attr (nøgleordsargumenter, valgfrit (standard= ingen attributter)) – Attributter, der skal tilføjes til grafen som nøgle=værdi-par.

Se også

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Eksempler

Opret en tom grafstruktur (en “null-graf”) uden knuder og uden kanter.

>>> G = nx.DiGraph()

G kan vokse på flere måder.

Noder:

Tilføj en knude ad gangen:

>>> G.add_node(1)

Føj knuderne fra en hvilken som helst container (en liste, dict, sæt oreven linjerne fra en fil eller knuderne fra en anden graf).

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

Ud over strenge og hele tal kan ethvert hashbart Python-objekt(undtagen None) repræsentere en node, f.eks. et tilpasset nodeobjekt,eller endda en anden Graph.

>>> G.add_node(H)

Kanter:

G kan også vokse ved at tilføje kanter.

Føj en kant,

>>> G.add_edge(1, 2)

en liste af kanter,

>>> G.add_edges_from()

eller en samling af kanter,

>>> G.add_edges_from(H.edges)

Hvis nogle kanter forbinder knuder, der endnu ikke er med i grafen, tilføjes knuderne automatisk. Der er ingen fejl, når der tilføjes knuder eller kanter, der allerede eksisterer.

Attributter:

Hver graf, knude og kant kan indeholde nøgle/værdi-attributpar i en tilknyttet attributordbog (nøglerne skal være hashbare).Som standard er disse tomme, men kan tilføjes eller ændres ved hjælp afadd_edge, add_node eller direkte manipulation af attributordbøgerne med henholdsvis grafen, knuden og kanten som navn.

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

Tilføj knudeattributter ved hjælp af add_node(), add_nodes_from() eller G.nodes

Tilføj edge-attributter ved hjælp af add_edge(), add_edges_from(), subscriptnotation eller G.edges.

Afkortninger:

Mange almindelige graffunktioner tillader python-syntaks for at fremskynde rapporteringen.

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

Ofte er den bedste måde at gennemløbe alle kanter i en graf på via naboerne.Naboerne rapporteres som et 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 kanternes rapporteringsobjekt er ofte mere praktisk:

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

Rapportering:

For detaljer om disse og andre diverse metoder, se nedenfor.

Underklasser (Avanceret):

Grafikklassen anvender en dict-of-dict-of-dict-datastruktur. den yderste dict (node_dict) indeholder adjacensinformationer med nøgle af node. den næste dict (adjlist_dict) repræsenterer adjacensinformationerne og holderedge-data med nøgle af nabo. Den inderste dict (edge_attr_dict) repræsenterer kantdataene og indeholder værdier for kantattributter, der er nøgleordnet ved attributnavne.

Hvert af disse tre dicts kan i en underklasse erstattes af et brugerdefineret, dict-lignende objekt. Generelt bør de diktlignende egenskaber bibeholdes, men der kan tilføjes ekstra egenskaber. For at erstatte et af disse diktater oprettes en ny grafklasse ved at ændre class(!)-variablen, der indeholder fabrikken for den pågældende diktatlignende struktur. Variabelnavnene er arenode_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory, adjlist_outer_dict_factory, edge_attr_dict_dict_factory og graph_attr_dict_dict_factory.

node_dict_factoryfunktion, (standard: dict)

Fabrikfunktion, der skal bruges til at oprette dict’en, der indeholder nodeattributter, med node-id som nøgle.Den bør ikke kræve nogen argumenter og returnere et dict-lignende objekt

node_attr_dict_factory: function, (default: dict)

Fabrikfunktion, der skal bruges til at oprette nodeattributedict, som indeholder attributværdier, der er nøgleordet efter attributnavn.Den bør ikke kræve nogen argumenter og returnere et diktlignende objekt

adjlist_outer_dict_factoryfunction, (default: dict)

Fabrikfunktion, der skal bruges til at oprette den yderste dikt i datastrukturen, der indeholder adjacency info med nøgle efter node.den bør ikke kræve nogen argumenter og returnere et diktlignende objekt.

adjlist_inner_dict_factoryfunction, valgfri (standard: dict)

Fabrikfunktion, der skal bruges til at oprette adjacency listdict’et, som indeholder data om en kant med nabo som nøgle, og som ikke kræver nogen argumenter og returnerer et diktlignende objekt

edge_attr_dict_factoryfunction, valgfri (standard: dict)

Fabrikfunktion, der skal bruges til at oprette edge attributdict’et, som indeholder attributværdier med attributnavn som nøgle.Den bør ikke kræve nogen argumenter og returnere et diktlignende objekt.

graph_attr_dict_factoryfunction, (default: dict)

Fabrikfunktion, der skal bruges til at oprette grafen attributedict, som indeholder attributværdier med attributnavn som nøgle.Den bør ikke kræve nogen argumenter og returnere et diktlignende objekt.

Typisk, hvis din udvidelse ikke påvirker datastrukturen, vil alle metoder gå i arv uden problemer, undtagen: to_directed/to_undirected Som standard skaber disse metoder en DiGraph/Graph-klasse, og du ønsker sandsynligvis, at de skal skabe din udvidelse af en DiGraph/Graph. For at lette dette definerer vi to klassevariabler, som du kan indstille i din underklasse.

to_directed_classcallable, (standard: DiGraph eller MultiDiGraph)

Klasse til at oprette en ny grafstruktur i to_directed-metoden.Hvis None, anvendes en NetworkX-klasse (DiGraph eller MultiDiGraph).

to_undirected_classcallable, (standard: Graph eller MultiGraph)

Klasse til oprettelse af en ny grafstruktur i to_undirected-metoden.Hvis None, anvendes en NetworkX-klasse (Graph eller MultiGraph).

Eksempler

Skab en grafklasse med lav hukommelse, der effektivt udelukker kantattributter ved at bruge et enkelt attributdict for alle kanter.Dette reducerer den anvendte hukommelse, men du mister kantattributter.

Se ordered for flere eksempler på oprettelse af grafunderklasser ved at overskrive basisklassen dict med et ordbogslignende objekt.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.