Python 无法理解networkx中dfs_树的结果?
我已经创建了一个图,我想验证所有的子树(目的是可视化层次结构),但是有一个错误,而且每个节点的结果都是相同的,而我知道,例如,节点1有一个子树,节点10没有子树:Python 无法理解networkx中dfs_树的结果?,python,networkx,Python,Networkx,我已经创建了一个图,我想验证所有的子树(目的是可视化层次结构),但是有一个错误,而且每个节点的结果都是相同的,而我知道,例如,节点1有一个子树,节点10没有子树: > 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
> 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
>G=nx.from_pandas_数据帧(db,'name1','name2','weight',nx.Graph())
`在此处输入代码`nodes=G.nodes()edges=G.edges()
>节点_和_度=G.度()
>
>d=dict(zip(G.nodes(),G.edges())
>
>度=列表(zip(G.nodes(),G.degree().values())度\u排序=
>排序(度,键=itemgetter(1),反向=真)
内部节点1=[n表示节点中的n,如果G.degree(n)>=200]
如果()
>4对于范围内的i(len(内部节点)):
> 5
>--->6打印(dfs_树(G,i))
> 7
>
>C:\ProgramData\Anaconda3\lib\site packages\networkx\algorithms\traversal\depth\u first\u search.py
>在dfs_树中(G,源)
>99其他:
>100 T.add_节点(源)
>-->101 T.从(dfs_边(G,源))添加_边
>102返回T
> 103
>
>C:\ProgramData\Anaconda3\lib\site packages\networkx\classes\digraph.py
>从中添加边(self、ebunch、attr\u dict、**attr)
>633“attr_dict参数必须是dict.”)
>634#进程ebunch
>-->635适用于电子束中的e:
>636 ne=len(e)
>637如果ne==3:
>
>C:\ProgramData\Anaconda3\lib\site packages\networkx\algorithms\traversal\depth\u first\u search.py
>在dfs_边中(G,源)
>59继续
>60.添加(开始)
>--->61堆栈=[(开始,国际热核实验堆(G[start]))]
>62当堆栈:
>63父级,子级=堆栈[-1]
>
>C:\ProgramData\Anaconda3\lib\site packages\networkx\classes\graph.py
>在uuu getitem中(self,n)
> 405 {1: {}}
> 406 """
>-->407返回自调整[n]
> 408
>409 def add_节点(self,n,attr_dict=None,**attr):
>
>关键错误:0
>
>len(列表(dfs_树(G,'1'))
1000
len(列表(dfs_树(G,'10'))
1000
我无法理解结果,可能是我走错了路,请提供任何帮助或评论!因为我在范围内(len(内部节点))
导致第一个I
为0
。错误消息说G
没有节点0
对于具有相同大小树的10和1:
如果您的图是无向图,则深度优先搜索将找到包含节点的整个组件。它不知道您希望它找到子树,因为无向图中不存在该概念。因此,如果1和10在同一棵树中,它将给出相同的节点集(但顺序不同).如何打印每个节点索引的子树?
dfs_树(G,节点索引)
,因为我有1000个节点。我想打印每个节点或图中更重要节点的所有子树。我创建了一个有向图,现在我有10个内部节点子树,有趣的是,对于叶子,我有11个子树,我希望叶子有0个子树!!