[英]How to list specific node/edge in networkx?
假设networkx
图中的一个树状结构networkx
:
n-----n1----n11
| |----n12
| |----n13
| |----n131
|----n2 |
| |-----n21 X
| |-----n22 |
| |----n221
|----n3
n4------n41
n5
谢谢。
图形构造:
>>> 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')
使用out_degree函数查找包含子节点的所有节点:
>>> [k for k,v in G.out_degree().iteritems() if v > 0] ['n13', 'n', 'n131', 'n1', 'n22', 'n2', 'n221', 'n4']
注意,n131和n221也出现在这里,因为它们彼此都有一个边缘。 你可以根据需要过滤掉这些。
没有孩子的所有节点:
>>> [k for k,v in G.out_degree().iteritems() if v == 0] ['n12', 'n11', 'n3', 'n41', 'n21', 'n5']
所有孤立节点,即度为0的节点:
>>> [k for k,v in G.degree().iteritems() if v == 0] ['n5']
要获得所有孤立“边缘”,您可以获取图形的组件列表,过滤掉不包含n
,然后仅保留具有边缘的组件:
>>> [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')]]
超过2个孩子的节点:
>>> [k for k,v in G.out_degree().iteritems() if v > 2] ['n', 'n1']
如果遍历树,则不会获得无限循环。 NetworkX具有对此具有鲁棒性的遍历算法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.