2017-08-13 1 views
0

Il y a une solution sur la conversion MULTIGRAPH à Graph simple en utilisant le code de MaehlerNetworkX convertir MULTIGRAPH à graphique simple en faisant la moyenne longueur parallèle

import networkx as nx 

G = nx.MultiGraph() 
G.add_nodes_from([1,2,3]) 
G.add_edges_from([(1, 2), (1, 2), (1, 3), (2, 3), (2, 3)]) 

G2 = nx.Graph(G) 

et un autre en utilisant le code de Aslak et Aric en additionnant le poids

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_iter(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})] 

Vous vous demandez comment faire la moyenne du poids des arêtes parallèles?

Répondre

0

Voici une approche similaire à celles qui utilisent le package de statistiques pour calculer la moyenne du poids de bord.

import networkx as nx 
from statistics import mean 
# weighted MultiGraph 
M = nx.MultiGraph() 
M.add_edge(1,2,weight=7) 
M.add_edge(1,2,weight=20) 
M.add_edge(2,3,weight=42) 
M.add_edge(2,3) 
# create weighted graph G from M 
G = nx.Graph() 
for u,v,data in M.edges(data=True): 
    if not G.has_edge(u,v): 
     # set weight to 1 if no weight is given for edge in M 
     weight = mean(d.get('weight',1) for d in M.get_edge_data(u,v).values()) 
     G.add_edge(u, v, weight=weight) 
print(G.edges(data=True)) 

OUTPUT (NetworkX-2.0-dev)

EdgeView ([(1, 2, { 'poids': 13,5}), (2, 3, { 'poids': 21,5})])