2016-12-19 49 views
1

我正在嘗試使用python NetworkX包來驗證其他代碼,但我擔心加載中心性並不意味着我的想法。當我運行下面的例子時,我預計只會得到負載的整數值,因爲它應該是通過節點的最短路徑數的每個節點的計數(即,我列出節點對之間的所有最短路徑,然後爲每個節點「v」算多少路交叉的,不包括路徑,其中「v」是第一個或最後一個節點):可以非標準化的負載中心性是非整數?

edges = [ ('a0','a1'),('a0','a2'),('a1','a4'),('a1','a2'),('a2','a4'),('a2','z5'),('a2','a3'),('a3','z5'),('a4','z5'),('a4','z6'),('a4','z7') 
    ,('z5','z6'),('z5','z7'),('z5','z8'),('z6','z7'),('z6','z8'),('z6','z9'),('z7','z8'),('z7','z9'),('z8','z9')] 
import networkx as nx 
testg = nx.Graph(edges) 
nx.load_centrality(testg, normalized=False) 

我得到的輸出是這樣的:

{'a0': 0.0, 
'a1': 3.16666665, 
'a2': 15.4999998, 
'a3': 0.0, 
'a4': 14.75, 
'z5': 20.25, 
'z6': 6.04166666, 
'z7': 6.04166666, 
'z8': 2.24999996, 
'z9': 0,0} 

這些都是類似於我通過相對大小手動計算的值,但爲什麼它們不是整數值?我測試過的每個其他網絡都會返回非標準化負載集中度的整數值,並且在定義中我沒有看到任何會導致這些值的內容。這個函數的python文檔說明了中介,並且還提供了一篇文章作爲算法的參考(我無法訪問)。

+0

至於python文檔參考,這可能是相同的文章,https://pdfs.semanticscholar.org/e3f3/35cf508f501b0e9c382ae3c445b29f34a58d.pdf – davedwards

+0

如果一對節點有兩個不同的最短路徑? – Joel

+0

考慮四個節點連接在一個正方形;每個節點都包含在對角之間的最短路徑中,但未規範化的負載從networkx.load_centrality報告爲1。 – mjenista

回答

1

經過非常廣泛的計算,基於與Downshift相關的論文,它看起來像'負載'遵循該論文中的中介定義,但是減去(2n-1)的因子以調整算法中的一些超計數。要麼是這樣,要麼本文中的算法沒有說明大小爲'1'的初始數據包應該只對它們通過的節點有貢獻,而不是對路徑的末端有貢獻。無論如何,我現在可以匹配networkx的輸出值。這些值不同於networkx自己的中介函數,它遵循基於節點對的文檔中的公式,而不是通過網絡傳播大小爲1的數據包。

特別是,因爲數據包在分支點處分裂成相同大小,所以節點可以累積部分數據包並因此累積非整數「負載」值。這不是描述在networkx文檔中所暗示的,但現在已經足夠清楚了。