You need to enable JavaScript to run this app. Networkx:如何拆分无向图节点并保留属性以断开边连接?
优惠活动
大模型
产品
解决方案
定价
更多

Networkx:如何拆分无向图节点并保留属性以断开边连接?

NetworkX 无向图节点拆分实操实现

实现逻辑

  • 提前梳理待拆分节点的所有邻接边,按照需要断开的连通关系把邻边分成两组
  • 在删除原节点前,完整复制它的全部节点属性,作为两个新节点的属性模板
  • 移除原节点,所有关联到该节点的边会随节点删除自动清理
  • 创建两个继承了全量原属性的新节点,分别把两组邻边重新关联到对应的新节点上,直接断开两组边之间的连通路径

可直接复用的函数实现

import networkx as nx

def split_graph_node(G: nx.Graph, target_node, group_a_neighbors, group_b_neighbors):
    # 先提取原节点的所有属性,避免节点删除后属性丢失
    origin_attrs = G.nodes[target_node].copy()
    # 移除原节点及所有关联边
    G.remove_node(target_node)
    # 生成两个带全量原属性的拆分节点,节点ID可根据业务规则自定义
    node1 = f"{target_node}_part1"
    node2 = f"{target_node}_part2"
    G.add_node(node1, **origin_attrs)
    G.add_node(node2, **origin_attrs)
    # 重新绑定两组邻边,形成两个独立的连通分支
    for nbr in group_a_neighbors:
        G.add_edge(node1, nbr)
    for nbr in group_b_neighbors:
        G.add_edge(node2, nbr)
    return G

匹配示例拓扑的使用方式

针对给出的拆分示例,原拓扑中待拆分的目标节点是中间位置的连接节点,邻点包含左侧分支节点、上下死端连接点、右侧分支节点:

  • 传入group_a_neighbors = [左侧分支连通点, 上方死端连接点, 下方死端连接点]
  • 传入group_b_neighbors = [右侧分支连通点]
    执行后原图会从单连通状态拆分为两个互不连通的子图,两个新节点会完整继承原节点的所有属性,和示例展示的拆分效果完全一致。

实操注意事项

  • 必须在删除原节点前完成属性提取:NetworkX的节点属性与节点实体强绑定,节点删除后属性会被同步清除,提前提取是保证属性完整保留的关键
  • 邻边分组可完全按照业务需求自定义,无需受固定拓扑限制,只要邻边被分到不同组,原节点作为连通中介的作用就会被完全切断
  • 拆分后的节点ID可根据场景调整,无需使用代码中的默认拼接格式,只要保证两个新节点ID唯一即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 12:15:03