In [1]:
import numpy as np
In [ ]:
def page_rank(A, r, epsilon=1e-10):
for i in range(1000):
r_new = A.dot(r)
if all([e[0] <= epsilon for e in (r - r_new)]): return r_new
r = r_new
return -1
In [131]:
def prepare_A_r(M, beta):
n = M.shape[0]
e = np.ones((n, n)) * (1.0/n)
A = beta * M + (1 - beta) * e
r = np.ones((1, 3)).T * (1.0/n)
return A, r
In [132]:
M = np.array([
[1.0/2, 1.0/2, 0],
[1.0/2, 0, 0],
[0, 1.0/2, 1.0],
])
beta = 0.8
In [133]:
page_rank(*prepare_A_r(M, beta))
Out[133]: