【问题标题】:Remove edges from a graph using networkx使用 networkx 从图中删除边
【发布时间】:2016-09-16 22:02:28
【问题描述】:

我正在尝试将 DiGraph 转换为 n-ary 树并以级别顺序或 BFS 显示节点。我的树与此类似,但更大,为简单起见,使用此示例:

G = networkx.DiGraph()
G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
G.add_edges_from([('n2', 'n21'), ('n2', 'n22'), ('n', 'n22')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221'), ('n', 'n131'), ('n', 'n221')])

树:借用了question的数据并进行了适当的修改:

n---->n1--->n11
 |     |--->n12
 |     |--->n13
 |-----------|--->n131 
 |--->n2              
 |     |---->n21     
 |     |---->n22     
 |------------|--->n221 
 |--->n3

现在我的真实数据集要复杂得多,有数百个节点,为了简单起见,我使用了上图。

我想从树中删除不必要的边缘,这样如果父母对孩子有边缘,对孙子有另一个边缘,并且父母也对孙子有边缘。我只是想删除孙子和父(根)之间的边缘,因为这使我的图表复杂化。 例如:我想从上图中删除('n', 'n131')('n', 'n221')。实现这一目标的最佳方法是什么。

【问题讨论】:

  • 您找到解决方案了吗?如果是,您能否分享一下见解(保证支持:P)?

标签: python algorithm networkx


【解决方案1】:

看起来你想找到图 G 的最小生成树,你可以使用 Prim 或 Kruskal 算法的实现:这里有一个来自 scipy:http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.sparse.csgraph.minimum_spanning_tree.html

【讨论】:

  • 感谢您的努力!但我必须通过networkx来做到这一点。
猜你喜欢
  • 2023-02-25
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多