2016-08-01 123 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}