2012-02-27 26 views
8

En un multigrafo cada llamada a * add_edge (a, b, peso = 1) * añadirá un nuevo borde entre nodos un y b. Al construir el gráfico, es posible modificar este peso cuando se encuentran de nuevo a y b. En este momento hago una comprobación para ver si (a, b) o (b, a) están conectados, luego tengo que eliminar el borde, y agregar uno nuevo. Me parece que debería simplemente poder actualizar el peso.borde Cambio en multigrafo NetworkX

Nota: Yo necesito multigrafos porque utilizo diferentes tipos de bordes entre los nodos (diferenciadas usando clave)

Respuesta

13

La documentación Multigraph.add_edge indica que se debe utilizar el argumento key para identificar de forma única los bordes en una multigrafo. He aquí un ejemplo:

>>> import networkx as nx 
>>> G = nx.MultiGraph() 
>>> G.add_edge(1, 2, key='xyz', weight=2) 
>>> G.add_edge(1, 2, key='abc', weight=1) 
>>> G.edges(data=True) 
[(1, 2, {'weight': 2}), (1, 2, {'weight': 1})] 

Ahora, para actualizar el borde con guía por xyz, sólo tiene que pasar ese parámetro de nuevo:

>>> G.add_edge(1, 2, key='xyz', weight=7) 
>>> G.edges(data=True) 
[(1, 2, {'weight': 7}), (1, 2, {'weight': 1})] 

para leer el valor anterior, puede utilizar get_edge_data así:

>>> G.get_edge_data(1, 2, key='xyz') 
{'weight': 7} 
+0

Gracias! ¿Cómo recupero los bordes que corresponden a la clave? para saber el valor anterior de _weight_ por ejemplo. ¿Tengo que recorrer todos los bordes para verificar primero la clave? – Vladtn

+1

@Vladtn actualizó la respuesta para incluir cómo hacerlo – jterrace

+1

Esto simplifica mucho mi código ... – Vladtn

Cuestiones relacionadas