在最新的networkx1.11的版本中,其官方文档和github的源代码中其实已经嵌入的wiener index的计算函数,就在references/Algorithms/wiener_index的目录下,并且也给出了其示例。但在真正下载或安装networkx过程中却没有这个函数,如今根据github的代码将其补全。
1. 将github中的networkx/Algorithms下的wiener.py拖下来放到Python包的按照目录下,如/usr/local/lib/python2.7/dist-packages/networkx-1.11-py2.7.egg/networkx/algorithms;
2. 修改wiener代码,在第84的位置,spl(G,weight=weight)生成的是字典,故在这里改成spl(G, weight=weight).iteritems(),p,v是需要循环这个字典的;另外从itertools import的chain似乎也错了;根据定义,还应该除以n(n-1)。
3. __init__.py的文件中加入from networkx.algorithms.wiener import*(为测试是不是一定需要)
这样,在重新import networkx即可。
示例:
import networkx as nx
n = 10
g = nx.complete_graph(10)
nx.wiener_index(g)
>> 1
注意:在函数中有特殊设置,即该图必须是联通的,否则结果为inf。
其实,这个速度是很慢的,努力用Igraph试试吧。