더북(TheBook)

프로그램 1.6.3 마르코프 연쇄의 혼합 (markov.py)

import sys
import stdarray
import stdio
 
moves = int(sys.argv[1])
n = stdio.readInt()
stdio.readInt()
 
p = stdarray.create2D(n, n, 0.0)
for i in range(n):
    for j in range(n):
        p[i][j] = stdio.readFloat()
 
ranks = stdarray.create1D(n, 0.0)
ranks[0] = 1.0
for i in range(moves):
    newRanks = stdarray.create1D(n, 0.0)
    for j in range(n):
        for k in range(n):
            newRanks[j] += ranks[k] * p[k][j]
    ranks = newRanks
 
for i in range(n):
    stdio.writef('%8.5f', ranks[i])
stdio.writeln()
moves
n
p[][]
ranks[]
newRanks[]
반복 수
페이지 수
변환 행렬
페이지 랭크
새로 계산한 페이지 랭크

이 프로그램은 명령 줄 인수로 정수 moves를 받고 표준 입력에서 변환 행렬을 입력받는다. 랜덤 서퍼가 moves만큼 이동한 후 각 페이지에 도달할 확률(페이지 랭크)을 계산하기 위해 행렬-벡터 곱셈을 moves만큼 수행하고 표준 출력 장치에 출력한다.

% python3 transition.py < tiny.txt | python3 markov.py 20
0.27245 0.26515 0.14669 0.24764 0.06806
% python3 transition.py < tiny.txt | python3 markov.py 40
0.27303 0.26573 0.14618 0.24723 0.06783
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.