簡體   English   中英

如何列出networkx中的特定節點/邊緣?

[英]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
  1. 如何列出具有“子節點”及其深度的所有節點,這里:n,n1,n13,n2,n22,n4
  2. 如何列出沒有“子節點”的所有節點,這里:n11,n12,n21,n41,n5
  3. 如何列出orphan節點,這里:n5以及如何列出“orphan”邊緣,不屬於root n edge,這里是n4-n41,
  4. 如何列出超過2個“子節點”的節點,這里是n,n1
  5. 如果n131,n221在節點遍歷中存在邊緣,如何處理,無限循環會發生嗎?

謝謝。

圖形構造:

>>> 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')
  1. 使用out_degree函數查找包含子節點的所有節點:

     >>> [k for k,v in G.out_degree().iteritems() if v > 0] ['n13', 'n', 'n131', 'n1', 'n22', 'n2', 'n221', 'n4'] 

    注意,n131和n221也出現在這里,因為它們彼此都有一個邊緣。 你可以根據需要過濾掉這些。

  2. 沒有孩子的所有節點:

     >>> [k for k,v in G.out_degree().iteritems() if v == 0] ['n12', 'n11', 'n3', 'n41', 'n21', 'n5'] 
  3. 所有孤立節點,即度為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')]] 
  4. 超過2個孩子的節點:

     >>> [k for k,v in G.out_degree().iteritems() if v > 2] ['n', 'n1'] 
  5. 如果遍歷樹,則不會獲得無限循環。 NetworkX具有對此具有魯棒性的遍歷算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM