2016-08-01 125 views
1

下面是代碼來創建使用Python 2.7與調用返回betweenness_centrality在networkx一個非常簡單的圖形:與betweenness_centrality意外的結果

import networkx as nx 
G = nx.Graph() 
G.add_nodes_from([1,3]) 
G.add_edge(1,2) 
G.add_edge(2,3) 
G.add_edge(1,3) 
G[1][2]['weight']=4400 
G[2][3]['weight']=4100 
G[1][3]['weight']=1500 
print nx.betweenness_centrality(G,weight='weight') 

我期望看到本質權重分配,但權重都爲零:

{1:0.0,2:0.0,3:0.0}

我清楚簡單的東西,並不能看到它是什麼從在線文檔。謝謝。

回答

1

networkx.betweenness_centrality()(可以說是標準定義)的默認值不包括計算端點。因此,與您的K3圖中的每個節點上的中介是0。如果你要計算終端使用

In [1]: import networkx as nx 

In [2]: G = nx.Graph() 

In [3]: G.add_nodes_from([1,3]) 

In [4]: G.add_edge(1,2) 

In [5]: G.add_edge(2,3) 

In [6]: G.add_edge(1,3) 

In [7]: G[1][2]['weight']=4400 

In [8]: G[2][3]['weight']=4100 

In [9]: G[1][3]['weight']=1500 

In [10]: print(nx.betweenness_centrality(G,weight='weight',endpoints=True)) 
{1: 2.0, 2: 2.0, 3: 2.0} 

注意「重量」屬性是用來尋找最短路徑,而不是在中介直接得分計數。例如,對於迴路中的非對稱路徑:

In [1]: import networkx as nx 

In [2]: G = nx.cycle_graph(4) 

In [3]: nx.set_edge_attributes(G,'weight',1) 

In [4]: print(nx.betweenness_centrality(G,weight='weight')) 
{0: 0.16666666666666666, 1: 0.16666666666666666, 2: 0.16666666666666666, 3: 0.16666666666666666} 

In [5]: G[0][1]['weight']=5 

In [6]: print(nx.betweenness_centrality(G,weight='weight')) 
{0: 0.0, 1: 0.0, 2: 0.6666666666666666, 3: 0.6666666666666666}