Articles

DiGraph-Directed graphs with self loops¶

Overview¶

classDiGraph(incoming_graph_data=None, **attr)¶

Basisklasse voor directed graphs.

Een DiGraph slaat knopen en randen op met optionele gegevens, of attributen.

DiGraphs houden gerichte randen. Self loops zijn toegestaan, maar meervoudige (parallelle) edges niet.

Nodes kunnen willekeurige (hashable) Python objecten zijn met optionele sleutel/waarde attributen. Bij conventie wordt None niet als knooppunt gebruikt.

Edges worden voorgesteld als links tussen knooppunten met optionele sleutel/waarde-attributen.

Parameters

  • incoming_graph_data (input graph (optioneel, standaard: None)) – Gegevens om de grafiek te initialiseren. Indien Geen (standaardinstelling) wordt een lege grafiek gemaakt. De gegevens kunnen elk formaat zijn dat wordt ondersteund door de functie to_networkx_graph(), momenteel inclusief edge list, dict of dicts, dict of lists, NetworkX-grafiek, NumPy-matrix of 2d ndarray, SciPy sparse matrix of PyGraphviz-grafiek.

  • attr (sleutelwoordargumenten, optioneel (standaard= geen attributen)) – Attributen om aan de grafiek toe te voegen als sleutel=waardeparen.

Zie ook

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Voorbeelden

Creëer een lege grafiekstructuur (een “nulgrafiek”) zonder knooppunten en zonder randen.

>>> G = nx.DiGraph()

G kan op verschillende manieren worden gegroeid.

Knooppunten:

Een knooppunt tegelijk toevoegen:

>>> G.add_node(1)

Knooppunten uit een willekeurige container toevoegen (een lijst, dict, set of ook de regels uit een bestand of de knooppunten uit een andere grafiek).

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

Naast strings en gehele getallen kan elk hashable Python-object (behalve Geen) een knooppunt vertegenwoordigen, bijvoorbeeld een aangepast knooppuntobject, of zelfs een andere grafiek.

>>> G.add_node(H)

Edges:

G kan ook worden gegroeid door edges toe te voegen.

Een rand toevoegen,

>>> G.add_edge(1, 2)

een lijst van randen,

>>> G.add_edges_from()

of een verzameling van randen,

>>> G.add_edges_from(H.edges)

Als sommige randen knooppunten verbinden die zich nog niet in de grafiek bevinden, worden de knooppunten automatisch toegevoegd. Er treden geen fouten op wanneer reeds bestaande knooppunten of randen worden toegevoegd.

Attributen:

Elke grafiek, knoop en rand kan sleutel/waarde-attribuutparen bevatten in een bijbehorend attribuutwoordenboek (de sleutels moeten hashable zijn).Standaard zijn deze leeg, maar ze kunnen worden toegevoegd of gewijzigd metadd_edge, add_node of directe manipulatie van de attribuutwoordenboeken met de naam graph, node en edge respectievelijk.

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

Voeg knooppuntattributen toe met add_node(), add_nodes_from() of G.nodes

Voeg randattributen toe met add_edge(), add_edges_from(), subscriptnotatie, of G.edges.

Shortcuts:

Vele veelgebruikte grafiekkenmerken maken python-syntax mogelijk om rapportage te versnellen.

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

Vaak is de beste manier om alle randen van een grafiek te doorlopen, via de buren.De buren worden gerapporteerd als een adjacency-dict G.adj of 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

Maar het object voor het rapporteren van de randen is vaak handiger:

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

Rapporteren:

Voor details over deze en andere diverse methoden, zie hieronder.

Subklassen (geavanceerd):

De Graph-klasse maakt gebruik van een dictaat-van-dictaat-gegevensstructuur.De buitenste dictaat (node_dict) bevat adjacency-informatie, gesleuteld per node.De volgende dictaat (adjlist_dict) vertegenwoordigt de adjacency-informatie en bevat edge-gegevens, gesleuteld per buur. De binnenste dict (edge_attr_dict) vertegenwoordigt de randgegevens en bevat randattribuutwaarden met attribuutnamen als sleutel.

Elk van deze drie dicts kan in een subklasse worden vervangen door een door de gebruiker gedefinieerd dictachtig object. In het algemeen moeten de dictachtige kenmerken behouden blijven, maar er kunnen extra kenmerken worden toegevoegd. Als u een van de dictees wilt vervangen, maakt u een nieuwe grafiekklasse door de klasse(!)-variabele te wijzigen die de fabriek voor die dictee-achtige structuur bevat. De variabele namen arenode_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory,adjlist_outer_dict_factory, edge_attr_dict_factory en graph_attr_dict_factory.

node_dict_factory, (default: dict)

Fabrieksfunctie die moet worden gebruikt om de dict te maken die knooppuntattributen bevat, gecodeerd door knooppunt-id.Vereist geen argumenten en geeft een dictachtig object

node_attr_dict_factory: function, (default: dict)

Fabrieksfunctie om het knooppuntattribuut-dicta aan te maken dat attribuutwaarden bevat, gecodeerd door attribuutnaam.Deze functie heeft geen argumenten nodig en stuurt een dictachtig object terug

adjlist_outer_dict_factory function, (default: dict)

Fabrieksfunctie om het buitenste dictaat in de gegevensstructuur te maken dat adjacency-info bevat, met als sleutel knooppunt. Deze functie heeft geen argumenten nodig en stuurt een dictachtig object terug.

adjlist_inner_dict_factoryfunction, optional (standaard: dict)

Fabrieksfunctie om het adjacency listdict te maken dat gegevens over de randen bevat, gecodeerd door buurman. De functie mag geen argumenten nodig hebben en moet een dictachtig object teruggeven

edge_attr_dict_factoryfunction, optional (standaard: dict)

Fabrieksfunctie om het edge attributedict te maken dat attribuutwaarden bevat, gecodeerd door attribuutnaam.Deze functie heeft geen argumenten nodig en stuurt een dictachtig object terug.

graph_attr_dict_factoryfunction, (standaard: dict)

Fabrieksfunctie om het grafiekattributedict te maken dat attribuutwaarden bevat met attribuutnaam als sleutel. Deze functie heeft geen argumenten nodig en stuurt een dictachtig object terug.

In principe, als uw uitbreiding de gegevensstructuur niet beïnvloedt, zullen alle methodes zonder probleem worden overgeërfd, behalve: to_directed/to_undirected. Standaard creëren deze methoden een DiGraph/Graph klasse en U wilt waarschijnlijk dat zij uw uitbreiding van een DiGraph/Graph creëren. Om dit te vergemakkelijken definiëren we twee klasse variabelen die je in je subklasse kunt instellen.

to_directed_classcallable, (default: DiGraph of MultiDiGraph)

Klasse om een nieuwe grafiek structuur te creëren in de to_directed methode.Indien None, wordt een NetworkX klasse (DiGraph of MultiDiGraph) gebruikt.

to_undirected_classcallable, (default: Graph of MultiGraph)

Klasse om een nieuwe grafiekstructuur te maken in de methode to_undirected.Indien None, wordt een NetworkX-klasse (Graph of MultiGraph) gebruikt.

Voorbeelden

Maak een grafiekklasse met weinig geheugen die effectief geen randattributen toestaat door een enkele attribuut-dic voor alle randen te gebruiken.Dit vermindert het gebruikte geheugen, maar u verliest randattributen.

Zie ordered voor meer voorbeelden van het maken van grafieksubklassen door de basisklasse dict te overschrijven met een woordenboekachtig object.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.