Suppose one below tree-like structure in networkx
graph:
n-----n1----n11
| |----n12
| |----n13
| |----n131
|----n2 |
| |-----n21 X
| |-----n22 |
| |----n221
|----n3
n4------n41
n5
Thanks.
How do I find nodes of neighbors in Python? Use the len() and list() functions together with the . neighbors() method to calculate the total number of neighbors that node n in graph G has. If the number of neighbors of node n is equal to m , add n to the set nodes using the .
An nbunch is a single node, container of nodes or None (representing all nodes). It can be a list, set, graph, etc.. To filter an nbunch so that only nodes actually in G appear, use G. nbunch_iter(nbunch) .
The degree is the sum of the edge weights adjacent to the node.
The documentation says that isolated vertices in graph can be obtained using networkx. isolates(G). It adds that the isolated vertices can be removed from a graph G using the code G. remove_nodes_from(nx.
Graph construction:
>>> import networkx as nx
>>> G = nx.DiGraph()
>>> G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
>>> G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
>>> G.add_edges_from([('n2', 'n21'), ('n2', 'n22')])
>>> G.add_edges_from([('n13', 'n131'), ('n22', 'n221')])
>>> G.add_edges_from([('n131', 'n221'), ('n221', 'n131')]
>>> G.add_node('n5')
Using the out_degree function to find all the nodes with children:
>>> [k for k,v in G.out_degree().iteritems() if v > 0]
['n13', 'n', 'n131', 'n1', 'n22', 'n2', 'n221', 'n4']
Note that n131 and n221 also show up here since they both have an edge to each other. You could filter these out if you want.
All nodes without children:
>>> [k for k,v in G.out_degree().iteritems() if v == 0]
['n12', 'n11', 'n3', 'n41', 'n21', 'n5']
All orphan nodes, i.e. nodes with degree 0:
>>> [k for k,v in G.degree().iteritems() if v == 0]
['n5']
To get all orphan "edges", you can get the list of components of the graph, filter out the ones that don't contain n
and then keep only the ones that have edges:
>>> [G.edges(component) for component in nx.connected_components(G.to_undirected()) if len(G.edges(component)) > 0 and 'n' not in component]
[[('n4', 'n41')]]
Nodes with more than 2 children:
>>> [k for k,v in G.out_degree().iteritems() if v > 2]
['n', 'n1']
If you traverse the tree, you will not get an infinite loop. NetworkX has traversal algorithms that are robust to this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With