Networkx Net Edges - PullRequest
       3

Networkx Net Edges

0 голосов
/ 24 октября 2019

У меня есть файл с дублированными ребрами по уважительной причине.

Дублирование двунаправленное, то есть у меня есть A-> B несколько раз, но также B-> A, многократно.

Мне нужно нетто ребер , то есть добавить все A-> B и вычесть все B-> A. Результат должен быть либо A-> B, либо B-> A, ребро с положительными значениями, как у A-> B, должно быть B-> A.

Я начал с этого скрипта (находится здесь Networkx: преобразовать мультиграф в простой граф с взвешенными ребрами ), и он хорошо выполняет суммы всех A-> B, , но он также суммирует ребра от B-> A до A-> B,когда мне нужно это вычесть.

Исходный код

import networkx as nx
# weighted MultiGraph
M = nx.MultiGraph()
M.add_edge(1,2,weight=7)
M.add_edge(1,2,weight=19)
M.add_edge(2,3,weight=42)

# create weighted graph from M
G = nx.Graph()
for u,v,data in M.edges(data=True):
    w = data['weight'] if 'weight' in data else 1.0
    if G.has_edge(u,v):
        G[u][v]['weight'] += w
    else:
        G.add_edge(u, v, weight=w)

print(G.edges(data=True))
# [(1, 2, {'weight': 26}), (2, 3, {'weight': 42})]

Затем я добавляю B-> A ребро

#trying to subtract from 1->2 edge above
M.add_edge(2,1,weight=26)

#reprocess entire calculations
G = nx.Graph()
for u,v,data in M.edges(data=True):
    w = data['weight'] if 'weight' in data else 1.0
    if G.has_edge(u,v):
        G[u][v]['weight'] += w
    else:
        G.add_edge(u, v, weight=w)

print(G.edges(data=True))
#results shows edge above added 26, not subtracted
#[(1, 2, {'weight': 52}), (2, 3, {'weight': 42})]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...