2017-10-01 9 views
0

まず、NetworkXを使ってPythonでグラフを表現します。次に、thisは、NetworkXの定義済みのBetweennessの中心です。問題は、分母なしでBetweenness Centralityを定義したことです。したがって、c_B(v)は頂点vを通るすべての短絡経路上の合計に過ぎません。定義済みのBetweennessの中心性を変更する方法はありますか?私はすでにload_centralityを試しましたが、これも適合しません。PythonのBetweenness Centralityの特別な形を計算する方法

敬具、

+0

グラフは接続されていますか? – rodgdor

+0

ありがとうございます。はい、私のグラフは接続されており、また無向です。 – Brayn

+0

'len(g.all_shortest_paths())'で中央値を掛けて、正規化を取り消してください。 – Paul

答えて

1

私は元の関数からご媒介中心を取得する簡単な方法があるとは思わない(少なくとも私には) マティアス。それを得る簡単な方法の1つは、自分で関数を実装することです。例を下に見てください。この例は、グラフが大きすぎない場合にのみ有効です(120個の頂点を持つグラフの場合、計算に9秒かかります)。

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]場合node通過Gにおける最短経路の数。

+0

ありがとう、これは私のために働く:) また、グラフは巨大ではありません。自分の(ペンとペーパー)計算を検証するだけです。 – Brayn

関連する問題