Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在networkx中有效地获取有向图中的输出节点?_Python_Python 3.x_Networkx - Fatal编程技术网

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

Python 如何在networkx中有效地获取有向图中的输出节点?,python,python-3.x,networkx,Python,Python 3.x,Networkx,我在Python网络包networkx中创建了一个简单的有向图,如下所示: import networkx as nx G = DiGraph([(1, 2)]) 现在我想知道确定输出节点的最快/最有效的方法,在本例中是节点2。我所说的输出节点是指有向图中没有后续节点的节点,而输入节点是没有前置节点的节点。类比来自机器学习,在机器学习中,我向输入节点提供值,对边执行数学运算,并在输出节点中具有输出值。请参见示例,其中p、d和lambda是输入节点,p'和d'是输出节点 在阅读之后,我想出了一

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

import networkx as nx

G = DiGraph([(1, 2)])
现在我想知道确定输出节点的最快/最有效的方法,在本例中是节点2。我所说的输出节点是指有向图中没有后续节点的节点,而输入节点是没有前置节点的节点。类比来自机器学习,在机器学习中,我向输入节点提供值,对边执行数学运算,并在输出节点中具有输出值。请参见示例,其中p、d和lambda是输入节点,p'和d'是输出节点


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

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

output_nodes = [u for u, deg in g.out_degree() if not deg]
但是,在构建图形时可以直接获取它们,实际上,如果u,v是圆弧,则可以从节点u中删除它们。剩下的将是输出节点。
另一种可能是使用另一种方式根据要应用的大小/最常见的操作来表示图形。

输出节点是什么意思?至少具有传入弧的节点?你能提供一个更好的例子来说明你想要实现什么吗?我所说的输出节点是指在有向图中没有后续节点的节点。我可能从机器学习中接管了太多的术语,但下面的有向图是正确的。p、 d和lambda是输入节点。p'和d'是输出节点。我将在原始问题中进一步说明。谢谢你的反馈!谢谢你的回答。虽然这样做有效,但它不是我所寻找的有效解决方案,因为它似乎只比我提供的示例稍微好一点,如果lenlistg.successorsu==0,则可以用[u代表g.nodes中的u]表示。在您的解决方案中,我仍然需要遍历整个图形。也许networkx中没有比这更有效的功能了。。。!?