我使用networkx计算特征向量中心性。问题是它花的时间太长(已经运行了大约6个小时)。有更快的方法来获得结果吗?
图中大约有200000个节点和6000万个边。
发布于 2019-06-21 17:45:54
通过查看源代码,networkx.algorithms.centrality.eigenvector
使用幂方法来查找领先的特征向量。
如果你坚持使用networkx
,就像Joel注意到的那样使用它:
centrality = nx.eigenvector_centrality_numpy(G)
Alternatively:
您可以使用使用ARPACK的scipy.sparse.linalg.eigs
,并且只请求返回一个特征向量。
玩具例子:
import scipy.sparse as sparse
X = np.array() # dimensions 200000 by 200000 as the adjacency
# Note: k=1 and you request the Largest real.
vals, vecs = sparse.linalg.eigs(X, k=1, which='LR')
在任何情况下,2000000乘200000是大的,根据稀疏性和矩阵的性质,该算法可能需要很长时间。您还需要大量的CPU和RAM。
关于networkx.algorithms.centrality.eigenvector
**:**的附加提示
如果您坚持使用networkx,请尝试放松容忍:
eigenvector_centrality(G, max_iter=100, tol=1e-06, nstart=None, weight=None)
尝试设置tol=1e-04
甚至tol=1e-03
发布于 2019-06-21 23:57:31
https://stackoverflow.com/questions/56707517
复制相似问题