2017-10-01 5 views
0

D'abord, j'utilise NetworkX pour représenter les graphes en python. Deuxièmement, this est la centralité prédéfinie Betweenness dans NetworkX. Le problème est que nous avons défini la centralité de l'intersection sans le dénominateur. Donc, c_B (v) est juste la somme sur tous les chemins courts qu'ils traversent le sommet v. Y a-t-il un moyen de modifier la centralité prédéfinie de Betweenness, de sorte que j'obtiens "notre" définition de centralité d'Betweenness? J'ai déjà essayé le load_centrality, mais cela ne correspond pas trop.Comment calculer une forme spéciale de Betweenness Centrality en python

Cordialement, Matthias

+0

Votre graphique est-il connecté? – rodgdor

+0

Merci pour votre réponse. Oui, mon graphique est connecté et non orienté. – Brayn

+0

Multipliez simplement la centralité entre-deux par 'len (g.all_shortest_paths())' pour annuler la normalisation. – Paul

Répondre

1

Je ne pense pas qu'il y ait un moyen simple d'obtenir votre intermédiarité centralité de la fonction d'origine (au moins de ne pas me). Un moyen facile de l'obtenir est de mettre en œuvre une fonction vous-même. Regardez ci-dessous pour un exemple. L'exemple ne serait efficace que si votre graphe n'est pas trop grand (le calcul prend ~ 9 secondes pour un graphe de 120 sommets).

import networkx as nx 

def bc(G): 
    vertices = G.nodes() 
    new_bc = {} 
    paths = defaultdict(dict) 

    # Get shortest paths between all pairs of vertices 
    for i, vertex in enumerate(vertices[:-1]): 
     for o_vertex in vertices[i+1:]: 
      paths[vertex][o_vertex] = [path for path in 
             nx.all_shortest_paths(G, vertex, o_vertex)] 

    for vertex in vertices: 
     counter = 0 
     for i, vertex1 in enumerate(vertices[:-1]): 
      for vertex2 in vertices[i+1:]: 
       for path in paths[vertex1][vertex2]: 
        if vertex in path[1:-1]: 
         counter += 1 
     new_bc[vertex] = counter 

    return new_bc 

bc[node] si le nombre de chemins les plus courts en passant par Gnode.

+0

Merci, cela fonctionne pour moi :) En outre, les graphiques ne sont pas énormes. C'est juste pour vérifier mes propres calculs (stylo et papier). – Brayn