本人在計算網絡效率的時候遇到了一個問題
networkx 提供了最短路徑函數shortest_path及shorest_path_length
我在計算網絡效率構造了一個無向圖,但是我在計算點與點之間的最短路徑長度時總是提示我說點不存在圖中,
我在上面使用nx.average_shortest_path_length(UG)的時候可以得到網絡平均最短路徑長度;這個說明我的點都是存在於圖中的,但是下面使用shortest_path_length(UG,1,2) 就說我的點不在圖中;很是鬱悶,如果哪位知道還請賜教,很感謝;下面附上我的網絡圖;
最終我的網絡效率解決方法如下
學過Dijkstra算法的都知道,當我們找u到v之間的最短路徑時,實際上同時也找出了u到網絡中所有其他節點的最短路徑。因此,代碼優化如下:
for u in G.nodes(): # 遍歷流量圖F的每個點
path = nx.shortest_path_length(G, source=u) # 在網絡G中計算從u開始到其他所有節點(注意包含自身)的最短路徑長度。如果兩個點之間沒有路徑,那path裏也不會存儲這個目標節點(比前面的代碼又省了判斷是否has_path的過程)
for v in path.keys(): # path是一個字典,裏面存了所有目的地節點到u的最短路徑長度
if u != v: # 如果起終點不同才累加計算效率
sumeff += 1 / path[v]
result = (2 / (N * (N - 1))) * sumeff # 計算網絡剩餘效率
至此計算出網絡效率