3つの関数はそれぞれ、同じ問題を解決するために異なるアプローチを使用します。
networkx.pagerank()
は、最大の固有値/固有ベクトルまたはGoogle行列を計算するためのべき乗法の純粋なPython実装です。精度を制御する2つのパラメータがあります-tol
とmax_iter
。
networkx.pagerank_scipy()
べき乗法のSciPyスパース行列実装です。同じ2つの精度パラメータがあります。
networkx.pagerank_numpy()
numpy.linalg.eig()
は、最大の固有値と固有ベクトルを計算する関数を呼び出すNumPy(完全)行列の実装です。この関数は、調整可能なパラメーターを使用せずに行列分解(直接)法を使用するLAPACKdgeev関数へのインターフェースです。
tol
パラメーターが十分に小さく、パラメーターが十分に大きい場合、3つすべてが、正常に動作するグラフに対して同じ答えを(数値の四捨五入内で)生成する必要があり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