Ответ 1
Каждая из трех функций использует другой подход к решению одной и той же проблемы:
networkx.pagerank()
- это реализация синтаксического метода pure-Python для вычисления самого большого собственного/собственного вектора или матрицы Google. Он имеет два параметра, которые контролируют точность - 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