【问题标题】:Better way to extract vertices from connected components?从连接组件中提取顶点的更好方法?
【发布时间】:2020-06-22 03:16:17
【问题描述】:

下图的边为[(0,1),(1,2),(3,3),(3,4),(1,1),(5,5),(5,6)],应该有如下连接的组件顶点集:[0, 1, 2], [3, 4], [5, 6]

图表设置

import graph_tool as gt
from graph_tool.topology import label_components
edges = [(0,1),(1,2),(3,3),(3,4),(1,1),(5,5),(5,6)]
g = gt.Graph()
g.set_directed(False)
g.add_edge_list(edges)

从连通分量中提取顶点

lc = label_components(g)
[gt.GraphView(g, vfilt=lc[0].a == _).get_vertices() for _ in range(len(lc[1]))]  # [1]

输出

[array([0, 1, 2], dtype=uint64), array([3, 4], dtype=uint64), array([5, 6], dtype=uint64)]

我的问题是,这真的是最好的方法吗? [1] 似乎比必要的更复杂。也许文档中有一个我没有找到的函数。

【问题讨论】:

  • 请注意Code Review 的存在,这是一个致力于通过审查改进工作代码的网站。至关重要的是,在发布之前阅读此内容: codereview.stackexchange.com/help/how-to-ask
  • 非常感谢,但需要明确的是,我的问题实际上是为了在文档中找到有用的功能,而不是寻求代码改进。
  • 请注意,您并没有真正在问题的“图表设置”部分设置图表。不过,请参阅下面的建议解决方案。
  • 哎呀 - 忘记添加边缘列表
  • 感谢您的回答 - 我明天早上会审查

标签: python graph-tool


【解决方案1】:

这是一种方法,使用属性映射的a 属性。不确定它是否比你的好得多,但它仍然是:

comp, a = gt.topology.label_components(g) 
[[i for i, x in enumerate(comp.a) if x == c] for c in range(len(a))]  

输出是:

[[0, 1, 2], [3, 4], [5, 6]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2020-08-03
    • 2019-11-27
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多