Articles

DiGraph-směrové grafy s vlastními smyčkami¶

Přehled¶

třídaDiGraph(incoming_graph_data=None, **attr)¶

Základní třída pro směrové grafy.

DiGraf uchovává uzly a hrany s volitelnými daty neboli atributy.

DiGrafy uchovávají směrované hrany. Vlastní smyčky jsou povoleny, ale vícenásobné(paralelní) hrany ne.

Uzly mohou být libovolné (hashovatelné) objekty Pythonu s volitelnými atributy klíč/hodnota. Podle konvence se None jako uzel nepoužívá.

Hrany jsou reprezentovány jako vazby mezi uzly s nepovinnými atributy klíč/hodnota.

Parametry

  • incoming_graph_data (vstupní graf (nepovinný, výchozí: žádný)) – Data pro inicializaci grafu. Není-li None (výchozí), vytvoří se prázdnýgraf. Data mohou být v libovolném formátu, který podporuje funkce to_networkx_graph(), v současné době včetně seznamu hran,diktu dictů, diktu seznamů, grafu NetworkX, matice NumPynebo 2d ndarray, řídké matice SciPy nebo grafu PyGraphviz.

  • attr (argumenty klíčového slova, nepovinné (výchozí=žádné atributy)) – Atributy, které se přidají do grafu jako dvojice klíč=hodnota.

Viz také

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Příklady

Vytvoří prázdnou strukturu grafu („nulový graf“) bez uzlů a bez hran.

>>> G = nx.DiGraph()

G lze rozrůst několika způsoby.

Uzly:

Přidávejte po jednom uzlu:

>>> G.add_node(1)

Přidávejte uzly z libovolného kontejneru (seznamu, diktu, množiny nebo třeba řádků ze souboru nebo uzlů z jiného grafu).

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

Kromě řetězců a celých čísel může uzel reprezentovat libovolný hashovatelný objekt jazyka Python(kromě None), např. vlastní objekt uzlu,nebo dokonce jiný Graph.

>>> G.add_node(H)

Hrany:

G lze také zvětšit přidáním hran.

Přidejte jednu hranu,

>>> G.add_edge(1, 2)

seznam hran,

>>> G.add_edges_from()

nebo kolekci hran,

>>> G.add_edges_from(H.edges)

Pokud některé hrany spojují uzly, které ještě nejsou v grafu, uzlyse přidají automaticky. Při přidávání již existujících uzlů nebo hran nedochází k chybám.

Atributy:

Každý graf, uzel a hrana mohou obsahovat dvojice atributů klíč/hodnota v přidruženém atributovém slovníku (klíče musí být hashovatelné). ve výchozím nastavení jsou prázdné, ale lze je přidat nebo změnit pomocíadd_edge, add_node nebo přímou manipulací s atributovými slovníky pojmenovanými graph, node a edge v tomto pořadí.

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

Přidání atributů uzlů pomocí add_node(), add_nodes_from() nebo G.nodes

Přidání atributů hran pomocí add_edge(), add_edges_from(), subscriptnotation nebo G.edges.

Zkratky:

Mnoho běžných funkcí grafu umožňuje syntaxe jazyka python urychlit vykazování.

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

Často je nejlepší způsob, jak projít všechny hrany grafu, přes sousedy.Sousedé se hlásí jako adjacency-dict G.adj nebo 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

Ale objekt hlášení hran je často pohodlnější:

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

Hlášení:

Podrobnosti o těchto a dalších různých metodách najdete níže.

Podtřídy (pokročilé):

Třída Graph používá datovou strukturu dict-of-dict-of-dict. vnější dict (node_dict) obsahuje adjacenční informace s klíčem podle uzlu. další dict (adjlist_dict) představuje adjacenční informace a holdsedge data s klíčem podle souseda. Vnitřní dict (edge_attr_dict) reprezentuje údaje o hranách a drží hodnoty atributů hran klíčované jmény atributů.

Každý z těchto tří dictů může být v podtřídě nahrazen uživatelem definovaným objektem podobným diktu. Obecně platí, že vlastnosti podobné diktům by měly být zachovány, ale lze přidat další vlastnosti. Chcete-li nahradit jeden zdiktů, vytvořte novou třídu grafu změnou proměnné class(!), která drží továrnu pro tuto strukturu podobnou diktátu. Jména proměnných jsou node_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory,adjlist_outer_dict_factory, edge_attr_dict_factory a graph_attr_dict_factory.

node_dict_factory, (výchozí: dict)

Funkce továrny, která se použije k vytvoření dict obsahující atributy uzlů, klíčované podle id uzlu.Neměla by vyžadovat žádné argumenty a vracet objekt podobný diktu

node_attr_dict_factory: funkce, (výchozí: dict)

Funkce továrny, která má být použita k vytvoření atributového diktu uzlu, který obsahuje hodnoty atributů klíčované jménem atributu.Neměla by vyžadovat žádné argumenty a vracet objekt podobný diktu

adjlist_outer_dict_factoryfunkce, (výchozí: dict)

Tovární funkce, která se použije k vytvoření nejvzdálenějšího diktu v datové struktuře, který uchovává informace o přilehlosti klíčované uzlem. neměla by vyžadovat žádné argumenty a vracet objekt podobný diktu.

adjlist_inner_dict_factoryfunction, nepovinná (výchozí: dict)

Factory function to be used to create adjacency listdict which holds edge data keyed by neighbor. it should require no arguments and return a dict-like object

edge_attr_dict_factoryfunction, nepovinná (výchozí: dict)

Factory function to be used to create edge attributedict which holds attribute values keyed by attribute name.Neměla by vyžadovat žádné argumenty a vracet objekt podobný diktu.

graph_attr_dict_factoryfunction, (výchozí: dict)

Tovární funkce, která se použije k vytvoření grafového atributového diktu, který uchovává hodnoty atributů klíčované jménem atributu.

Typicky, pokud vaše rozšíření neovlivňuje datovou strukturu, budou všechny metody zděděny bez problémů, kromě: to_directed/to_undirected.Ve výchozím nastavení tyto metody vytvářejí třídu DiGraph/Graph a vy pravděpodobně chcete, aby vytvářely vaše rozšíření DiGraph/Graph. Abychom vám to usnadnili, definujeme dvě proměnné třídy, které můžete nastavit ve své podtřídě.

to_directed_classcallable, (výchozí: DiGraph nebo MultiDiGraph)

Třída pro vytvoření nové struktury grafu v metodě to_directed.Je-li None, použije se třída NetworkX (DiGraph nebo MultiDiGraph).

to_undirected_classcallable, (výchozí: Graph nebo MultiGraph)

Třída pro vytvoření nové struktury grafu v metodě to_undirected.Pokud None, použije se třída NetworkX (Graph nebo MultiGraph).

Příklady

Vytvořte třídu grafu s nízkou pamětí, která efektivně znemožňuje atributy hran použitím jediného atributu dict pro všechny hrany.

Snížíte tím spotřebu paměti, ale ztratíte atributy hran.

Další příklady vytvoření podtříd grafu přepsáním základní třídy dict objektem podobným slovníku najdete v ordered.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.