python-3.x - 使用 NetworkX 查找图中每个节点的根
问题描述
如何使用 NetworkX 为图中的每个节点获取根?
这是我的图表示例:
预期结果:
节点 4 有根:0
节点 2 有根:0
节点 1 有根:0
节点 0 有根:0
节点 3 有根:8
节点 5 有根:8
节点 8 有根:8
我创建了一个while循环来获取节点的根,它运行良好,除非它非常慢。
对于大型网络,有什么有效的方法可以做到这一点吗?
解决方案
假设每个组件有一个根节点,您可以首先查找图中的所有根节点,检查哪些节点的度数为0
。一旦确定,遍历nx.weakly_connected_components
,并找到属于它的根节点:
roots = {n for n,d in G.in_degree() if d==0}
d = {}
for comp in nx.weakly_connected_components(G):
comp_root = next(root for root in roots if root in comp)
d.update(dict.fromkeys(comp, comp_root))
print(d)
{0: 0, 1: 0, 2: 0, 4: 0, 8: 8, 3: 8, 5: 8}
推荐阅读
- asp.net - ASP.NET/SQL 没有从数据库中检索正确的值
- python - 如何在 Flask 服务器中运行 React javascript?
- android - 是否可以在 Java 模块中使用 Android 框架?
- javafx-2 - 在 javafx 的 ComboBox.setConverter 中使用 FormatStringConverter 的问题
- angular - 离子相机预览不可见
- r - 使用 R:当它们包含某些值时,如何删除行?
- arduino - (Serial.available() > 0) 等待用户输入
- jquery - 单击后关闭悬停子菜单而不刷新页面
- json - 将来自 solr 的 json 日期转换为实际日期 (yyyy/mm/dd)
- sql-server - 合并语句以在 Sql Server 中删除/更新/插入数据