Articles

DiGraph – grafy skierowane z samopętlami

Overviewś

classDiGraph(incoming_graph_data=None, **attr)¶

Klasa bazowa dla grafów skierowanych.

DiGraph przechowuje węzły i krawędzie z opcjonalnymi danymi, lub atrybutami.

DiGraphs posiadają skierowane krawędzie. Samopętle są dozwolone, ale wielokrotne (równoległe) krawędzie nie są.

Węzły mogą być dowolnymi (hashowalnymi) obiektami Pythona z opcjonalnymi atrybutamikey/value. Konwencjonalnie None nie jest używany jako węzeł.

Krawędzie są reprezentowane jako linki pomiędzy węzłami z opcjonalnymi atrybutamikey/value.

Parametry

  • incoming_graph_data (graf wejściowy (opcjonalny, domyślnie: None)) – Dane do inicjalizacji grafu. Jeżeli brak (domyślnie), to zostanie utworzony pusty graf. Dane mogą być w dowolnym formacie obsługiwanym przez funkcję to_networkx_graph(), obecnie włączając w to listę krawędzi, dict of dicts, dict of lists, NetworkX graph, NumPy matrix lub 2d ndarray, SciPy sparse matrix lub PyGraphviz graph.

  • attr (keyword arguments, opcjonalne (default= brak atrybutów)) – Atrybuty do dodania do grafu jako pary klucz=wartość.

Zobacz także

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Przykłady

Tworzenie pustej struktury grafu („null graph”) bez węzłów i krawędzi.

>>> G = nx.DiGraph()

G może być powiększony na kilka sposobów.

Węzły:

Dodawaj po jednym węźle na raz:

>>> G.add_node(1)

Dodawaj węzły z dowolnego kontenera (lista, dict, zbiór lub nawet wiersze z pliku lub węzły z innego grafu).

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

Oprócz łańcuchów i liczb całkowitych dowolny haszowalny obiekt Pythona (z wyjątkiem None) może reprezentować węzeł, np. niestandardowy obiekt węzła lub nawet inny graf.

>>> G.add_node(H)

Krawędzie:

G może być również powiększany przez dodawanie krawędzi.

Dodaj jedną krawędź,

>>> G.add_edge(1, 2)

listę krawędzi,

>>> G.add_edges_from()

lub kolekcję krawędzi,

>>> G.add_edges_from(H.edges)

Jeśli niektóre krawędzie łączą węzły, których jeszcze nie ma w grafie, węzły te są dodawane automatycznie. Nie ma błędów przy dodawaniu węzłów lub krawędzi, które już istnieją.

Atrybuty:

Każdy graf, węzeł i krawędź mogą zawierać pary atrybutów klucz-wartość w powiązanym słowniku atrybutów (klucze muszą być hashowalne).Domyślnie są one puste, ale można je dodawać lub zmieniać za pomocąadd_edge, add_node lub bezpośredniej manipulacji słownikami atrybutów o nazwach odpowiednio graph, node i edge.

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

Dodaj atrybuty węzłów używając add_node(), add_nodes_from() lub G.nodes

Dodaj atrybuty krawędzi używając add_edge(), add_edges_from(), subscriptation, lub G.edges.

Skróty:

Wiele typowych funkcji grafu umożliwia składnię Pythona w celu przyspieszenia raportowania.

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

Często najlepszym sposobem na prześledzenie wszystkich krawędzi grafu jest przejście przez sąsiadów.Sąsiedzi są raportowani jako adjacency-dict G.adj lub 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 obiekt raportujący krawędzie jest często wygodniejszy:

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

Reporting:

Szczegóły dotyczące tych i innych różnych metod znajdują się poniżej.

Podklasy (zaawansowane):

Klasa Graph używa struktury danych typu dict-of-dict-of-dict.Zewnętrzny dict (node_dict) przechowuje informacje o przyległościach kluczowe dla węzła.Następny dict (adjlist_dict) reprezentuje informacje o przyległościach i przechowuje dane o krawędziach kluczowe dla sąsiada. The inner dict (edge_attr_dict) representsthe edge data and holds edge attribute values keyed by attribute names.

Każde z tych trzech dicts może być zastąpione w podklasie przez zdefiniowany przez użytkownika obiekt typu dict. Ogólnie rzecz biorąc, cechy podobne do dict powinny zostać zachowane, ale można dodać dodatkowe cechy. Aby zastąpić jeden z dictów, należy utworzyć nową klasę grafu poprzez zmianę zmiennej class(!) przechowującej fabrykę dla tej struktury podobnej do dictów. Nazwy zmiennych to: arenode_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory,adjlist_outer_dict_factory, edge_attr_dict_factory i graph_attr_dict_factory.

node_dict_factoryfunction, (default: dict)

Funkcja fabryki, która ma być użyta do utworzenia dict zawierającego atrybuty węzła, kluczowane przez id węzła.Powinna nie wymagać żadnych argumentów i zwracać obiekt podobny do dict

node_attr_dict_factory: function, (default: dict)

Funkcja fabryczna używana do tworzenia node attributedict, który przechowuje wartości atrybutów, kluczowane przez nazwę atrybutu.Powinna ona nie wymagać żadnych argumentów i zwracać obiekt podobny do dict

adjlist_outer_dict_factoryfunction, (default: dict)

Funkcja fabryczna używana do tworzenia najbardziej zewnętrznego węzła w strukturze danych, który przechowuje informacje o przyległościach z kluczem przez węzeł.Powinna ona nie wymagać żadnych argumentów i zwracać obiekt podobny do dict.

adjlist_inner_dict_factoryfunction, opcjonalne (domyślnie: dict)

Funkcja fabryczna służąca do tworzenia adjacency listdict, która przechowuje dane o krawędziach z kluczem przez neighbor.Powinna nie wymagać żadnych argumentów i zwracać obiekt typu dict

edge_attr_dict_factoryfunction, opcjonalne (domyślnie: dict)

Funkcja fabryczna służąca do tworzenia edge attributedict, która przechowuje wartości atrybutów z kluczem przez nazwę atrybutu.Nie powinna ona wymagać żadnych argumentów i zwracać obiekt podobny do dict.

graph_attr_dict_factoryfunction, (domyślnie: dict)

Funkcja fabryczna używana do tworzenia graph attributedict, która przechowuje wartości atrybutów kluczowych przez nazwę atrybutu.Nie powinna wymagać żadnych argumentów i zwracać obiekt podobny do dict.

Typowo, jeśli twoje rozszerzenie nie ma wpływu na strukturę danych, wszystkie metody będą dziedziczone bez problemu z wyjątkiem: to_directed/to_undirected.Domyślnie metody te tworzą klasę DiGraph/Graph, a ty prawdopodobnie chcesz, aby tworzyły twoje rozszerzenie klasy DiGraph/Graph. Aby to ułatwić, definiujemy dwie zmienne klasowe, które możesz ustawić w swojej podklasie.

to_directed_classcallable, (domyślnie: DiGraph lub MultiDiGraph)

Klasa do tworzenia nowej struktury grafu w metodzie to_directed.Jeśli None, używana jest klasa NetworkX (DiGraph lub MultiDiGraph).

to_undirected_classcallable, (domyślnie: Graph lub MultiGraph)

Klasa do tworzenia nowej struktury grafu w metodzie to_undirected.Jeśli None, używana jest klasa NetworkX (Graph lub MultiGraph).

Przykłady

Stwórz klasę grafu o małej ilości pamięci, która skutecznie wyłącza atrybuty krawędzi, używając pojedynczego atrybutu dict dla wszystkich krawędzi.Zmniejsza to ilość używanej pamięci, ale tracisz atrybuty krawędzi.

Zobacz ordered więcej przykładów tworzenia podklas grafu przez nadpisanie klasy bazowej dict obiektem podobnym do słownika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.