0
我创建了一个图,我想验证所有的子树(目的是可视化层次结构),但是有一个错误,并且每个节点的结果都是相同的,而我知道例如node1有一个子树和节点10没有一个子树:无法理解networkx中dfs_tree的结果?
> G = nx.from_pandas_dataframe(db, 'name1','name2','weight',nx.Graph())
`enter code here`nodes = G.nodes() edges= G.edges()
> node_and_degree=G.degree()
>
> d=dict(zip(G.nodes(),G.edges()))
>
> degree=list(zip(G.nodes(),G.degree().values())) degree_sort=
> sorted(degree,key=itemgetter(1), reverse=True)
inner_nodes1 = [ n for n in nodes if G.degree(n) >=200 ]
inner_nodes2 = [ n for n in nodes if (100<= G.degree(n) <200) ]
inner_nodes3 = [ n for n in nodes if (50<= G.degree(n) <100) ]
inner_nodes4 = [ n for n in nodes if (20<= G.degree(n) <50) ]
inner_nodes5 = [ n for n in nodes if (10<= G.degree(n) <20) ]
inner_nodes6= [ n for n in nodes if (2<= G.degree(n) <10) ]
leaves = set(n for n in nodes if G.degree(n) == 1)
inner_nodes = [ n for n in nodes if G.degree(n) >1 ]
> from collections import defaultdict from
> networkx.algorithms.traversal.depth_first_search import dfs_tree
>
> for i in range(len(inner_nodes)):
>
> print(dfs_tree(G,i))
>
> --------------------------------------------------------------------------- KeyError Traceback (most recent call
> last) <ipython-input-25-4494433c2afc> in <module>()
> 4 for i in range(len(inner_nodes)):
> 5
> ----> 6 print(dfs_tree(G,i))
> 7
>
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\algorithms\traversal\depth_first_search.py
> in dfs_tree(G, source)
> 99 else:
> 100 T.add_node(source)
> --> 101 T.add_edges_from(dfs_edges(G,source))
> 102 return T
> 103
>
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\classes\digraph.py
> in add_edges_from(self, ebunch, attr_dict, **attr)
> 633 "The attr_dict argument must be a dict.")
> 634 # process ebunch
> --> 635 for e in ebunch:
> 636 ne = len(e)
> 637 if ne==3:
>
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\algorithms\traversal\depth_first_search.py
> in dfs_edges(G, source)
> 59 continue
> 60 visited.add(start)
> ---> 61 stack = [(start,iter(G[start]))]
> 62 while stack:
> 63 parent,children = stack[-1]
>
> C:\ProgramData\Anaconda3\lib\site-packages\networkx\classes\graph.py
> in __getitem__(self, n)
> 405 {1: {}}
> 406 """
> --> 407 return self.adj[n]
> 408
> 409 def add_node(self, n, attr_dict=None, **attr):
>
> KeyError: 0
>
> len(list(dfs_tree(G,'1')))
1000
len(list(dfs_tree(G,'10')))
1000
我无法理解结果,可能是我在错误的路径,任何帮助或评论赞赏!
如何打印关于每个节点索引的子树? 'dfs_tree(G,节点索引)',因为我有1000个节点。我想为每个节点或在图中更重要的节点打印所有子树。 – sunny
我创建了一个有向图,现在我有了Inner_nodes 10子树,有趣的是,对于树叶我有11个子树,我预计有0棵子树! – sunny