You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.2 KiB

9.3 动手实现PageRank

理解了PageRank算法原理之后想要动手实现PageRank算法其实不难。代码如下


from numpy import *

# 构造转移矩阵其中a为有向图的邻接矩阵
def graphMove(a):  
    b = transpose(a)  # b为a的转置矩阵
    c = zeros((a.shape), dtype=float)
    for i in range(a.shape[0]):
        for j in range(a.shape[1]):
            c[i][j] = a[i][j] / (b[j].sum())  # 完成初始化分配
    return c


# 初始化V0
def firstPr(c):  
    pr = zeros((c.shape[0], 1), dtype=float)
    for i in range(c.shape[0]):
        pr[i] = float(1) / c.shape[0]
    return pr


# 计算pageRank值
def pageRank(p, m, v):  
    # 判断pr矩阵是否收敛,(v == p*dot(m,v) + (1-p)*v).all()判断前后的pr矩阵是否相等若相等则停止循环
    while ((v == p * dot(m, v) + (
        1 - p) * v).all() == False):  
        v = p * dot(m, v) + (1 - p) * v
    return v


if __name__ == "__main__":
    # 网页的邻接矩阵
    a = array([[0, 1, 1, 0],
            [1, 0, 0, 1],
            [1, 0, 0, 1],
            [1, 1, 0, 0]], dtype=float)
    M = graphMove(a)
    pr = firstPr(M)
    # 上网者查看当前网页的概率
    p = 0.8  
    # 计算V
    print(pageRank(p, M, pr))