Networkx:的PageRank,pagerank_numpy和pagerank_scipy之间

2019-08-01 20:07发布

有谁知道在Networkx三种不同的PageRank功能之间的准确度有什么不同?

我有1000个节点和139732个边的图形,而“普通” pagerank看起来功能并没有在所有的工作-除了两个节点具有相同的PG,所以我假设这功能不起作用以及相当的大图?

pagerank_numpy的价值观也似乎有点超过摊开pagerank_scipy的价值观。 这个函数的文档中说,“这将是最快,最准确的小图”。 什么是“小”的图是什么意思?

另外,为什么不pagerank_numpy允许max_itertol参数呢?

Answer 1:

每三个功能使用不同的方法来解决同样的问题:

networkx.pagerank()是一个纯Python实现功率的方法来计算最大特征值/本征矢量或谷歌基质。 它具有控制精度两个参数- tolmax_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?