本人在计算网络效率的时候遇到了一个问题
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 # 计算网络剩余效率
至此计算出网络效率