Networkx имеет функцию to_undirected , но он не суммирует веса, он просто обновляет вес с последним найденным весом ребра из исходного графика:
Если в графе существуют ребра в обоих направлениях (u, v) и (v, u), атрибуты для нового неориентированного ребра будут являться комбинацией атрибутов направленных ребер. Данные ребер обновляются в (произвольном) порядке, в котором встречаются ребра. Для более индивидуального управления атрибутами ребер используйте add_edge ().
Вы должны сделать это вручную следующим образом:
G = nx.DiGraph()
G.add_weighted_edges_from([
(1,2,3),
(1,3,4),
(2,1,5),
(2,3,1),
(3,2,2)
])
UG = G.to_undirected()
for node in G:
for ngbr in nx.neighbors(G, node):
if node in nx.neighbors(G, ngbr):
UG.edges[node, ngbr]['weight'] = (
G.edges[node, ngbr]['weight'] + G.edges[ngbr, node]['weight']
)
UG.edges.data('weight')
вернет суммированные веса:
EdgeDataView([(1, 2, 8), (1, 3, 4), (2, 3, 3)])