You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

graph_tool中节点收缩(Edge Contraction)功能查询与实现方案咨询

graph_tool边收缩功能解决方案

内置功能说明

graph_tool原生提供了符合边收缩语义的内置接口,无需自行实现纯Python版本,性能完全满足迁移需求。
内置接口为graph_tool.generation.contract_edges(),底层基于C++实现,运行效率和graph_tool其他原生接口一致,远高于networkx的纯Python边收缩实现,不会出现性能倒退的问题。

使用方法

  • 首先需要创建一个顶点属性映射,标记每个顶点需要被合并到的目标顶点ID,同一收缩组内的所有顶点需填写相同的目标ID
  • 调用接口时可通过参数控制是否保留自环、是否合并多重边,适配不同场景的需求
  • 仅需收缩单条边时,只需将该边的两个顶点标记为同一目标ID,其余顶点映射为自身ID即可

最简使用示例

import graph_tool.all as gt

# 初始化测试无向图
g = gt.Graph(directed=False)
g.add_vertex(5)
g.add_edge_list([(0,1), (1,2), (2,3), (3,4), (0,2)])

# 构造顶点合并映射:将顶点1收缩到顶点0
contract_map = g.new_vertex_property("int")
for v in g.vertices():
    contract_map[v] = int(v)
contract_map[1] = 0

# 执行边收缩,自动删除自环、返回多重边合并计数
g_after, merge_count = gt.contract_edges(
    g, 
    contract_map, 
    self_loops=False, 
    merges=True
)

特殊场景自定义实现建议

如果你的业务场景有特殊的边收缩逻辑,无法直接用内置接口实现,也尽量不要在Python层做顶点、边的遍历循环,所有数据处理逻辑尽量通过graph_tool的内置属性映射、向量化操作完成,让计算逻辑在C层面执行,依然可以保证运行效率远高于networkx的实现。

内容的提问来源于stack exchange,提问作者frog1944

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:39:01