Estoy usando la biblioteca de gráficos de NetworkX para Python. En algún momento de mi programa, me gustaría "consolidar" mis nodeID en una secuencia de números. Aquí está mi enfoque ingenuo:¿Cuál es la forma más eficiente de mover/cambiar el nombre de un nodo en NetworkX?
start = 1 # could be anything
for i, n in enumerate(g.nodes()):
if i+start == n:
continue
g.add_node(i+start, attr_dict=g.node[n])
g.add_edges_from([(i+start, v, g[n][v]) for v in g.neighbors(n)])
g.remove_node(n)
¿Hay una manera más rápida que esta copia exhaustiva de todos los vecinos? Por ejemplo, probé g[i+start] = g[n]
, pero eso está prohibido.
Gracias!
Gracias Josh! Esa función hace exactamente lo que pedí. Pero lamentablemente no está en su lugar, por lo que al mirar [fuente] (https://networkx.lanl.gov/trac/browser/networkx/networkx/convert.py) (líneas 214-357) sigue siendo O (V + E) en lugar del O (V) teóricamente posible. Aún así, parece que es un 25% más rápido que mi intento. – Juan
Se me acaba de ocurrir que, dada la forma en que se implementan los gráficos en networkx, el límite O (V) no será alcanzable. Se deberá visitar cada borde para reasignar el ID de nodo. – Juan