Networkx:pagerank、pagerank_numpy和pagerank_scipy之间的区别?

2024-05-14 22:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道Networkx中三个不同pagerank函数在准确性上的差异吗?在

我有一个有1000个节点和139732条边的图,而“普通”pagerank函数似乎根本不起作用——除了两个节点有相同的PG,所以我假设这个函数对大型图不太有效?在

pagerank_numpy的值似乎也比pagerank_scipy的值分散得多一些。这个函数的文档说“对于小图形来说这将是最快和最准确的。”什么是“小”图形?在

另外,为什么pagerank numpy不允许max_iter和{}参数?在


Tags: 函数文档numpynetworkx图形参数节点scipy
1条回答
网友
1楼 · 发布于 2024-05-14 22:24:22

这三个功能都使用不同的方法来解决同一个问题:

networkx.pagerank()是计算最大特征值/特征向量或Google矩阵的纯Python实现。它有两个控制精度的参数-tolmax_iter。在

networkx.pagerank_scipy()是幂方法的一种SciPy稀疏矩阵实现。它有相同的两个精度参数。在

networkx.pagerank_numpy()是一个NumPy(完整)矩阵实现,它调用numpy.linalg.eig()函数来计算最大的特征值和特征向量。该函数是LAPACK dgeev函数的接口,该函数使用矩阵分解(direct)方法,没有可调参数。在

如果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

相关问题 更多 >

    热门问题