Jestem nowy w Pythonie, a ja staram się obliczyć Page Rank wektor według tego równania w Pythonie: Page Rank w Pythonie
Gdzie Pi (k) jest Page-Rank wektor po k-tej iteracji, G macierz pomocną, H Hiperlink macierzy jest zwisające wektor węzeł alfa = 0,85 e jest wektorem jedynek.
obliczeń z G zajmuje dużo czasu, z wykorzystaniem macierzy hiperłącze H, czyli macierz rzadką, powinno znacznie mniej czasu.
Oto mój kod:
for i in range(1, k_steps+1):
for j in range(0, len(dictionary_urls)):
for k in range(0, len(dictionary_urls)):
if matrix_H[k][j] != 0:
matrix_pi_k[i][j] += matrix_pi_k[i-1][k] * float(matrix_H[k][j])
alpha_pi_k_a += matrix_pi_k[i-1][k]*float(vector_a[k])
alpha_pi_k_a = alpha_pi_k_a * float(alpha)
alpha_pi_k_a = alpha_pi_k_a + float((1- alpha))
alpha_pi_k_a = alpha_pi_k_a/float(len(dictionary_urls))
matrix_pi_k[i][j] = matrix_pi_k[i][j] * float(alpha)
matrix_pi_k[i][j] = matrix_pi_k[i][j] + float(alpha_pi_k_a)
alpha_pi_k_a = 0
k_steps jest liczba iteracji potrzebne.
dictionary_links zawiera wszystkie adresy URL.
Po wykonaniu kodu matrix_pi_k powinny mieć wszystkie nosiciela PI
I oblicza wszystkie zmienne, które potrzebne. Mam czas działania przy użyciu macierzy H jest prawie równa czas pracy przy użyciu matrycy G, choć teoretycznie powinno być inaczej.
Dlaczego? A co powinienem zmienić, aby skrócić czas działania?
Dziękuję.
Okay, ale problem jest nawet wtedy, gdy wiem, które wpisy są zerowe, powinienem wykonać drugą część obliczeń, które wpływają na każdą iterację. przez drugą część rozumiem mnożenie wektora Pi przez wektor a i dodanie wyniku do wektora Pi. Nie mogę więc pominąć iteracji nawet przy wpisie zerowym –
@RomanYanovitski To dobrze, ponieważ nie musisz obliczać 'pi * H' i' pi * a' w tym samym czasie. Powinieneś naprawdę używać 'numpy', tak czy inaczej. – jme