有谁知道在Networkx三种不同的PageRank功能之间的准确度有什么不同?
我有1000个节点和139732个边的图形,而“普通” pagerank
看起来功能并没有在所有的工作-除了两个节点具有相同的PG,所以我假设这功能不起作用以及相当的大图?
pagerank_numpy
的价值观也似乎有点超过摊开pagerank_scipy
的价值观。 这个函数的文档中说,“这将是最快,最准确的小图”。 什么是“小”的图是什么意思?
另外,为什么不pagerank_numpy允许max_iter
和tol
参数呢?
每三个功能使用不同的方法来解决同样的问题:
networkx.pagerank()
是一个纯Python实现功率的方法来计算最大特征值/本征矢量或谷歌基质。 它具有控制精度两个参数- tol
和max_iter
。
networkx.pagerank_scipy()
是一个稀疏SciPy的矩阵实现的功率的方法。 它有两个相同的精度参数。
networkx.pagerank_numpy()
是NumPy的(全)矩阵执行调用numpy.linalg.eig()
函数来计算最大特征值与特征向量。 也就是说功能是将LAPACK dgeev函数,它是使用了不带可调参数的矩阵分解(直接)方法的接口。
如果所有这三个应该产生的乖巧图形相同的答案(数值舍入内) tol
参数足够小, max_iter
参数足够大。 哪一个是快取决于你的图形的大小和如何做好电力方法适用于您的图形。
In [12]: import networkx as nx
In [13]: G=nx.gnp_random_graph(1000,0.01,directed=True)
In [14]: %timeit nx.pagerank(G,tol=1e-10)
10 loops, best of 3: 157 ms per loop
In [15]: %timeit nx.pagerank_scipy(G,tol=1e-10)
100 loops, best of 3: 14 ms per loop
In [16]: %timeit nx.pagerank(G)
10 loops, best of 3: 137 ms per loop
文章来源: Networkx: Differences between pagerank, pagerank_numpy, and pagerank_scipy?