Articles

DiGraph-Gráficos dirigidos con bucles propios¶

Descripción general¶

claseDiGraph(incoming_graph_data=None, **attr)¶

Clase base para grafos dirigidos.

Un DiGraph almacena nodos y aristas con datos opcionales, o atributos.

Los DiGraphs contienen aristas dirigidas. Los bucles propios están permitidos pero las aristas múltiples (paralelas) no lo están.

Los nodos pueden ser objetos Python arbitrarios (hashable) con atributos opcionales clave/valor. Por convención None no se usa como nodo.

Las aristas se representan como enlaces entre nodos con atributos opcionaleskey/value.

Parámetros

  • incoming_graph_data (grafo de entrada (opcional, por defecto: None)) – Datos para inicializar el grafo. Si es None (por defecto) se crea un gráfico vacío. Los datos pueden ser cualquier formato soportado por la función to_networkx_graph(), incluyendo actualmente lista de aristas, dict de dictos, dict de listas, gráfico NetworkX, matriz NumPy o ndarray 2d, matriz dispersa SciPy, o gráfico PyGraphviz.

  • attr (argumentos de palabra clave, opcional (por defecto= sin atributos)) – Atributos a añadir al gráfico como pares clave=valor.

Ver también

Graph, MultiGraph, MultiDiGraph, OrderedDiGraph

Ejemplos

Crear una estructura de gráfico vacía (un «gráfico nulo») sin nodos ni aristas.

>>> G = nx.DiGraph()

G puede crecer de varias maneras.

Nodos:

Añadir un nodo cada vez:

>>> G.add_node(1)

Añadir los nodos desde cualquier contenedor (una lista, un dict, un conjunto o incluso las líneas de un fichero o los nodos de otro gráfico).

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

Además de cadenas y enteros cualquier objeto hashable de Python (excepto None) puede representar un nodo, por ejemplo un objeto nodo personalizado, o incluso otro Graph.

>>> G.add_node(H)

Bordes:

G también puede crecer añadiendo bordes.

Añadir una arista,

>>> G.add_edge(1, 2)

una lista de aristas,

>>> G.add_edges_from()

o una colección de aristas,

>>> G.add_edges_from(H.edges)

Si algunas aristas conectan nodos que aún no están en el grafo, los nodos se añaden automáticamente. No se producen errores cuando se añaden nodos o aristas que ya existen.

Atributos:

Cada gráfico, nodo y arista puede contener pares de atributos clave/valor en un diccionario de atributos asociado (las claves deben ser hashable).Por defecto están vacíos, pero pueden añadirse o modificarse utilizandoadd_edge, add_node o manipulando directamente los diccionarios de atributos denominados graph, node y edge respectivamente.

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

Añadir atributos de nodos usando add_node(), add_nodes_from() o G.nodes

Añadir atributos de aristas usando add_edge(), add_edges_from(), subscriptnotation, o G.edges.

Ahorros:

Muchas características comunes de los gráficos permiten que la sintaxis de python acelere la elaboración de informes.

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

A menudo la mejor manera de recorrer todas las aristas de un gráfico es a través de los vecinos.Los vecinos se reportan como un diccionario de adyacencia 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

Pero el objeto de reporte de aristas es a menudo más conveniente:

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

Reporte:

Para detalles sobre estos y otros métodos misceláneos, ver abajo.

Subclases (Avanzadas):

La clase Graph utiliza una estructura de datos dict-of-dict-of-dict.El dict exterior (node_dict) contiene información de adyacencia con clave de nodo.El siguiente dict (adjlist_dict) representa la información de adyacencia y contiene datos de arista con clave de vecino. El dict interior (edge_attr_dict) representa los datos de las aristas y contiene los valores de los atributos de las aristas con la clave de los nombres de los atributos.

Cada uno de estos tres dicts puede ser sustituido en una subclase por un objeto tipo dict definido por el usuario. En general, las características de los dictados deben mantenerse, pero se pueden añadir características adicionales. Para reemplazar uno de los dictados, cree una nueva clase gráfica cambiando la variable class(!) que contiene la fábrica para esa estructura tipo dictado. Los nombres de las variables son: node_dict_factory, node_attr_dict_factory, adjlist_inner_dict_factory, adjlist_outer_dict_factory, edge_attr_dict_factory y graph_attr_dict_factory.

node_dict_factoryfunction, (por defecto: dict)

Función de fábrica que se utilizará para crear el dict que contiene los atributos de los nodos, con la clave del id del nodo.No requiere argumentos y devuelve un objeto tipo dict

node_attr_dict_factory: function, (por defecto: dict)

Función de fábrica que se utilizará para crear el atributo del nodo que contiene los valores de los atributos con la clave del nombre del atributo.No requiere argumentos y devuelve un objeto de tipo dict

adjlist_outer_dict_factoryfunction, (por defecto: dict)

Función de fábrica que se utiliza para crear el dictado más externo de la estructura de datos que contiene información de adyacencia codificada por el nodo.

adjlist_inner_dict_factoryfunction, opcional (por defecto: dict)

Función de fábrica que se utilizará para crear la lista de adyacencia que contiene los datos de las aristas codificados por el vecino.No debería requerir argumentos y devolver un objeto tipo dict.

graph_attr_dict_factoryfunction, (por defecto: dict)

Función de fábrica que se utilizará para crear el atributo del gráfico que contiene los valores de los atributos con la clave del nombre del atributo.No debería requerir argumentos y devolver un objeto tipo dict.

Típicamente, si su extensión no afecta a la estructura de datos, todos los métodos se heredarán sin problemas excepto: to_directed/to_undirected.Por defecto estos métodos crean una clase DiGraph/Graph y probablemente quieras que creen tu extensión de un DiGraph/Graph. Para facilitar esto definimos dos variables de clase que puedes establecer en tu subclase.

to_directed_classcallable, (por defecto: DiGraph o MultiDiGraph)

Clase para crear una nueva estructura gráfica en el método to_directed.Si None, se utiliza una clase NetworkX (DiGraph o MultiDiGraph).

to_undirected_classcallable, (por defecto: Graph o MultiGraph)

Clase para crear una nueva estructura de grafos en el método to_undirected.Si None, se utiliza una clase NetworkX (Graph o MultiGraph).

Ejemplos

Crea una clase de grafos de baja memoria que efectivamente no permite atributos de aristas utilizando un único atributo dict para todas las aristas.

Por favor, vea ordered para más ejemplos de creación de subclases de grafos sobrescribiendo la clase base dict con un objeto tipo diccionario.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.