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

Networkx:将MultiDiGraph转换为DiGraph时合并边权重求和

NetworkX中MultiDiGraph转DiGraph时合并边权重求和的实现方式

核心结论

NetworkX没有内置直接将MultiDiGraph转换为DiGraph并自动对同方向(u->v)边权重求和的功能——默认的DiGraph(MultiDiGraph)转换逻辑只会保留每对节点间最后添加的那条边,这也是你示例中输出为5而非期望14的原因。

手动实现方法

要实现权重求和的转换,必须通过手动遍历节点与边的方式构建新的DiGraph,以下是两种简洁的实现方式:

方法1:遍历所有边累加权重

import networkx as nx

G = nx.MultiDiGraph()
G.add_edge('u', 'v', weight=7)
G.add_edge('u', 'v', weight=1)
G.add_edge('u', 'v', weight=1)
G.add_edge('u', 'v', weight=5)

# 初始化空的DiGraph
H = nx.DiGraph()

# 遍历所有节点对及其对应的多条边
for u, v, edge_data in G.edges(data=True):
    # 如果u->v边已存在,累加权重;否则添加新边
    if H.has_edge(u, v):
        H[u][v]['weight'] += edge_data['weight']
    else:
        H.add_edge(u, v, weight=edge_data['weight'])

edge_weight = H['u']['v']['weight']
print(edge_weight)  # 输出14

方法2:按节点邻接关系分组求和

利用G.adj遍历每个节点的邻接关系,对每个邻接节点的所有边权重直接求和:

import networkx as nx

G = nx.MultiDiGraph()
G.add_edge('u', 'v', weight=7)
G.add_edge('u', 'v', weight=1)
G.add_edge('u', 'v', weight=1)
G.add_edge('u', 'v', weight=5)

H = nx.DiGraph()
for u in G.nodes():
    for v in G[u]:
        # 累加u到v的所有边权重
        total_weight = sum(edge['weight'] for edge in G[u][v].values())
        H.add_edge(u, v, weight=total_weight)

edge_weight = H['u']['v']['weight']
print(edge_weight)  # 输出14

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:12:39