Articles

DiGraph-Grafi diretti con auto loop¶

Panoramica¶

classeDiGraph(incoming_graph_data=None, **attr)¶

Classe base per grafi diretti.

Un DiGraph memorizza nodi e bordi con dati opzionali, o attributi.

I DiGraph contengono bordi diretti. Gli autocicli sono permessi ma i bordi multipli (paralleli) no.

I nodi possono essere oggetti Python arbitrari (hashable) con attributi chiave/valore opzionali. Per convenzione None non è usato come nodo.

I bordi sono rappresentati come collegamenti tra i nodi con attributi chiave/valore opzionali.

Parametri

  • incoming_graph_data (grafico in ingresso (opzionale, default: None)) – Dati per inizializzare il grafico. Se None (default) viene creato un grafico vuoto. I dati possono essere in qualsiasi formato supportato dalla funzione to_networkx_graph(), attualmente inclusi lista di bordi, dict di ditt, dict di liste, grafico NetworkX, matrice NumPy o 2d ndarray, matrice sparsa SciPy, o grafico PyGraphviz.

  • attr (argomenti parola chiave, opzionale (default= nessun attributo)) – Attributi da aggiungere al grafico come coppie chiave=valore.

Vedi anche

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Esempi

Crea una struttura di grafo vuoto (un “grafo nullo”) senza nodi e senza bordi.

>>> G = nx.DiGraph()

G può essere cresciuto in diversi modi.

Nodi:

Aggiungere un nodo alla volta:

>>> G.add_node(1)

Aggiungere i nodi da qualsiasi contenitore (una lista, dict, set o anche le linee da un file o i nodi da un altro grafico).

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

Oltre alle stringhe e agli interi, qualsiasi oggetto hashable Python (tranne Nessuno) può rappresentare un nodo, per esempio un oggetto nodo personalizzato, o anche un altro grafico.

>>> G.add_node(H)

Edges:

G può anche crescere aggiungendo edges.

Aggiungi un bordo,

>>> G.add_edge(1, 2)

una lista di bordi,

>>> G.add_edges_from()

o un insieme di bordi,

>>> G.add_edges_from(H.edges)

Se alcuni bordi collegano nodi non ancora nel grafico, i nodi vengono aggiunti automaticamente. Non ci sono errori quando si aggiungono nodi o bordi che già esistono.

Attributi:

Ogni grafo, nodo e bordo può contenere coppie chiave/valore di attributi in un dizionario di attributi associato (le chiavi devono essere hashable).Per default questi sono vuoti, ma possono essere aggiunti o modificati usandoadd_edge, add_node o manipolando direttamente i dizionari attribuiti denominati rispettivamente graph, node e edge.

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

Aggiungi attributi di nodo usando add_node(), add_nodes_from() o G.nodes

Aggiungi attributi di bordo usando add_edge(), add_edges_from(), subscriptnotation o G.edges.

Scorciatoie:

Molte caratteristiche comuni dei grafi permettono di velocizzare la sintassi python.

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

Spesso il modo migliore per attraversare tutti i bordi di un grafico è attraverso i vicini.I vicini sono riportati come un adjacency-dict G.adj o 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

Ma l’oggetto edges reporting è spesso più conveniente:

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

Reporting:

Per dettagli su questi e altri metodi vari, vedi sotto.

Sottoclassi (avanzate):

La classe Graph usa una struttura dati dict-of-dict-of-dict.Il dict esterno (node_dict) contiene le informazioni di adiacenza codificate per nodo.Il dict successivo (adjlist_dict) rappresenta le informazioni di adiacenza e contiene i dati di bordo codificati per vicino. Il dict interno (edge_attr_dict) rappresenta i dati del bordo e contiene i valori dell’attributo del bordo, codificati dai nomi degli attributi.

Ognuno di questi tre dict può essere sostituito in una sottoclasse da un oggetto simile al dict definito dall’utente. In generale, le caratteristiche simili ai dittici dovrebbero essere mantenute, ma possono essere aggiunte altre caratteristiche. Per sostituire uno dei dittici si crea una nuova classe di grafi cambiando la variabile class(!) che contiene il factory per quella struttura simile al dittico. I nomi delle variabili sono arenode_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory, adjlist_outer_dict_factory, edge_attr_dict_factory e graph_attr_dict_factory.

node_dict_factoryfunction, (default: dict)

Funzione di fabbrica da usare per creare il dict contenente nodeattributes, con chiave per id del nodo.Non dovrebbe richiedere argomenti e restituire un oggetto simile a dict

node_attr_dict_factory: function, (default: dict)

Funzione di fabbrica da usare per creare il nodo attributedict che contiene valori di attributo con chiave per nome di attributo.Non dovrebbe richiedere argomenti e restituire un oggetto simile a un dict

adjlist_outer_dict_factoryfunction, (default: dict)

Funzione di fabbrica da usare per creare il dict più esterno nella struttura dati che contiene le informazioni di adiacenza, con chiave per nodo.

adjlist_inner_dict_factoryfunction, opzionale (default: dict)

Funzione di fabbrica da usare per creare l’adjacency listdict che contiene i dati sul bordo, codificati per neighbor, non deve richiedere argomenti e deve restituire un oggetto simile a un dict

edge_attr_dict_factoryfunction, opzionale (default: dict)

Funzione di fabbrica da usare per creare l’edge attributedict che contiene i valori degli attributi, codificati per nome di attributo.Non dovrebbe richiedere argomenti e restituire un oggetto simile a un dettato.

graph_attr_dict_factoryfunction, (default: dict)

Funzione di fabbrica da usare per creare il graph attributedict che contiene i valori degli attributi con la chiave del nome dell’attributo.

In genere, se la vostra estensione non ha impatto sulla struttura dei dati, tutti i metodi saranno ereditati senza problemi, tranne: to_directed/to_undirected.Per default questi metodi creano una classe DiGraph/Graph e voi probabilmente volete che creino la vostra estensione di un DiGraph/Graph. Per facilitare questo definiamo due variabili di classe che potete impostare nella vostra sottoclasse.

to_directed_classcallable, (default: DiGraph o MultiDiGraph)

Classe per creare una nuova struttura del grafico nel metodo to_directed.Se None, viene usata una classe NetworkX (DiGraph o MultiDiGraph).

to_undirected_classcallable, (default: Graph o MultiGraph)

Classe per creare una nuova struttura a grafo nel metodo to_undirected.Se None, viene usata una classe NetworkX (Graph o MultiGraph).

Esempi

Crea una classe di grafi a bassa memoria che effettivamente non permette gli attributi dei bordi usando un singolo attributo dict per tutti i bordi.Questo riduce la memoria usata, ma si perdono gli attributi dei bordi.

Vedi ordered per altri esempi di creazione di sottoclassi di grafi sovrascrivendo la classe base dict con un oggetto simile a un dizionario.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.