tutorial print python set condition networkx

print - python networkx elimina nodos y bordes con alguna condición



networkx tutorial plot (2)

Si tenemos un gráfico inicializado g lo siguiente establecerá que f esté sujeto a la restricción de que cada vértice debe tener un grado> 0. Fácilmente podríamos generalizar 0 con una variable:

f = nx.Graph() fedges = filter(lambda x: g.degree()[x[0]] > 0 and g.degree()[x[1]] > 0, g.edges()) f.add_edges_from(fedges)

En la red de bibliotecas de python, me gustaría eliminar los nodos y los bordes de un gráfico que tienen alguna propiedad. Por ejemplo, supongamos que quisiera eliminar todos los nodos y bordes donde el grado de un nodo era <2. Considere el siguiente código de psuedo:

vdict = g.degree_dict() #dictionary of nodes and their degrees g.remove_from_nodes(v in g s.t. vdict[v] < 2)

He visto alguna sintaxis que usa la notación de teoría de conjuntos, pero como todavía soy nuevo en Python no sé cómo usarlo. ¿Cómo convierto esto en código python funcional?


El método Graph.remove_nodes_from () toma una lista (contenedor en realidad) de nodos. Entonces solo necesitas crear una lista que satisfaga tu condición. Puede usar la estructura de comprensión de la lista de Python para crear de forma compacta una lista de nodos para eliminar.

In [1]: import networkx as nx In [2]: G = nx.Graph() In [3]: G.add_edge(1,2) In [4]: G.add_edge(1,3) In [5]: G.add_edge(1,4) In [6]: G.add_edge(2,3) In [7]: G.add_edge(2,4) In [8]: G.degree() Out[8]: {1: 3, 2: 3, 3: 2, 4: 2} In [9]: remove = [node for node,degree in G.degree().items() if degree > 2] In [10]: remove Out[10]: [1, 2] In [11]: G.nodes() Out[11]: [1, 2, 3, 4] In [12]: G.remove_nodes_from(remove) In [13]: G.nodes() Out[13]: [3, 4]