首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pagerank_scipy : pagerank、pagerank_numpy和Networkx之间的区别?

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

Stack Overflow用户
提问于 2012-10-24 06:52:31
回答 1查看 6K关注 0票数 16

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

我有一个包含1,000个节点和139732条边的图,而“普通的”pagerank函数似乎根本不起作用--除了两个节点之外,所有的节点都有相同的PG,所以我假设这个函数对于大型图不能很好地工作?

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 08:06:47

三个函数中的每一个都使用不同的方法来解决相同的问题:

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

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

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

如果tol参数足够小而max_iter参数足够大,那么对于行为良好的图形,这三种方法都应该产生相同的答案(在数值舍入范围内)。哪个更快取决于图形的大小以及power方法在图形上的效果。

代码语言:javascript
复制
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
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13040548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档