我有一个包含大约一百万个节点和一千万条边的稀疏图。我想计算每个节点的个性化 PageRank,其中节点 n 的个性化 PageRank 是指:
# x_0 is a column vector of all zeros, except a 1 in the position corresponding to node n
# adjacency_matrix is a matrix with a 1 in position (i, j) if there is an edge from node i to node j
x_1 = 0.5 * x_0 + 0.5 * adjacency_matrix * x_0
x_2 = 0.5 * x_0 + 0.5 * adjacency_matrix * x_1
x_3 = 0.5 * x_0 + 0.5 * adjacency_matrix * x_2
# x_3 now holds the personalized PageRank scores
# i'm basically approximating the personalized PageRank by running this for only 3 iterations
我尝试使用 NumPy 对其进行编码,但运行时间太长。(约1秒计算每个节点的个性化PageRank)
我还尝试将 x_0 更改为矩阵(通过组合几个不同节点的列向量),但这也没有太大帮助,实际上使计算时间更长。(可能是因为矩阵很快变得密集,所以它不再适合 RAM?我不确定)
是否有另一种建议的方法来计算这个,最好是在 Python 中?我还考虑过使用非矩阵方法进行 PageRank 计算,通过模拟随机游走进行 3 次迭代(即,我以 1 的分数开始每个节点,然后将该分数传播给它的邻居,等等),但我不确定这是否会更快。会是吗?如果是,为什么?