繁体   English   中英

如何在networkx的有向图中有效地获取输出节点?

[英]How to efficiently get output nodes in a directed graph in networkx?

我在 Python 网络包networkx创建了一个简单的有向图(DiGraph),如下所示:

import networkx as nx

G = DiGraph([(1, 2)])

现在我想知道确定输出节点(在这种情况下是节点 2)的最快/最有效的方法 我所说的输出节点是指有向图中没有后继的节点-输入节点是没有前任的节点。 类比来自机器学习,其中我向输入节点提供值,在边上执行数学运算并在输出节点中具有输出值 参见此处的示例,其中 p、d 和 lambda 是输入节点,而 p' 和 d' 是输出节点。

阅读文档后,我想出了这样低效的方法,例如遍历图的所有节点,对它们调用successors()并保存所有没有后继的节点。 然而,这是非常低效的,特别是因为在我的实际项目中,图表明显更大更复杂。 我希望有一种简单有效的方法,例如G.out_nodes()或类似的方法,可以在编辑图形时跟踪输出节点,尽管我似乎无法找到它。 然而,由于确定有向图中的输出和输入节点并不是什么罕见的任务,我认为我遗漏了一些东西。 我希望你能帮助我。 非常感谢。

一旦你有了你的图,你就可以迭代并获得out_degree等于 0 的节点。

output_nodes = [u for u, deg in g.out_degree() if not deg]

但是,您可以在构建图形时直接获取它们,如果(u,v)是弧,您确实可以从节点u删除它们。 其余将是输出节点。
另一种可能性是使用另一种方式根据要应用的大小/最常见的操作来表示您的图形。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM