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

NetworkX移除边缘后恢复方法及属性分组替代方案咨询

恢复移除边缘的方法

如果已经直接删除了color='e'的边且未提前备份,无法直接恢复。正确做法是删除前先完整备份待移除边的所有属性,后续需要恢复时重新添加:

import networkx as nx

# 备份color='e'的边(包含所有属性)
edges_to_restore = [(u, v, attr) for u, v, attr in G.edges(data=True) if attr['color'] == 'e']

# 删除目标边
G.remove_edges_from([(u, v) for u, v, _ in edges_to_restore])

# 后续需要恢复时,重新添加边及属性
for u, v, attr in edges_to_restore:
    G.add_edge(u, v, **attr)

无需移除边缘的分组方案(更推荐)

完全不用修改原图,通过过滤边生成子图来实现分组,原图完整保留所有边:

# 生成不含color='e'边的子图(原图G保持不变)
filtered_edges = [(u, v) for u, v, attr in G.edges(data=True) if attr['color'] != 'e']
G_filtered = G.edge_subgraph(filtered_edges)

# 遍历过滤子图的连通组件,获取分组
groups = []
for comp in nx.connected_components(G_filtered):
    subgraph = G_filtered.subgraph(comp)
    asset_attrs = nx.get_edge_attributes(subgraph, "asset")
    groups.append({
        "nodes": list(comp),
        "assets": asset_attrs
    })

# 后续处理color='e'的边直接用原图G即可
e_edges = [(u, v, attr) for u, v, attr in G.edges(data=True) if attr['color'] == 'e']

momepy相关实现思路

momepy基于NetworkX,可结合其空间网络分析工具实现需求:

import momepy

# 生成过滤子图
filtered_edges = [(u, v) for u, v, attr in G.edges(data=True) if attr['color'] != 'e']
G_filtered = G.edge_subgraph(filtered_edges)

# 用momepy导出组件信息(自动标记组件ID)
edges_gdf = momepy.nx_to_gdf(G_filtered, edges=True)
components = edges_gdf['component'].unique()

# 遍历组件分组
for comp_id in components:
    comp_edges = edges_gdf[edges_gdf['component'] == comp_id]
    # 提取该组的asset属性
    asset_attrs = comp_edges.set_index(['u', 'v'])['asset'].to_dict()
    # 处理分组逻辑

momepy更适配空间网络的形态分析,如果你是用momepy创建的空间节点/边,这种方式可无缝衔接,无需修改原图结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:45:35