课题python 实现PageRank计算.docx

上传人:b****7 文档编号:9643490 上传时间:2023-02-05 格式:DOCX 页数:26 大小:19.11KB
下载 相关 举报
课题python 实现PageRank计算.docx_第1页
第1页 / 共26页
课题python 实现PageRank计算.docx_第2页
第2页 / 共26页
课题python 实现PageRank计算.docx_第3页
第3页 / 共26页
课题python 实现PageRank计算.docx_第4页
第4页 / 共26页
课题python 实现PageRank计算.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

课题python 实现PageRank计算.docx

《课题python 实现PageRank计算.docx》由会员分享,可在线阅读,更多相关《课题python 实现PageRank计算.docx(26页珍藏版)》请在冰豆网上搜索。

课题python 实现PageRank计算.docx

课题python实现PageRank计算

python实现PageRank计算

#coding=utf-8

#Filename:

pr.py

 

S=[[0,0,0,0],[0.3333,0,0,1],[0.3333,0.5,0,0],[0.3333,0.5,1,0]]#原始矩阵

U=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]]#全部都为1的矩阵

f=[1,1,1,1]#物征向量

alpha=0.85#a值0-1之间的小数

n=len(S)#网页数

 

'''

aSa权重值由google决定值大小,0-1之间,S为原始矩阵

'''

defmultiGeneMatrix(gene,Matrix):

mullist=[[0]*len(Matrix)forrowinrange(len(Matrix))]#定义新的矩阵大小,初始化为0

foriinrange(0,len(Matrix)):

forjinrange(0,len(Matrix)):

mullist[i][j]+=Matrix[i][j]*gene

returnmullist

'''

两个矩阵相加

'''

defaddMatrix(Matrix1,Matrix2):

iflen(Matrix1[0])!

=len(Matrix2):

print"这两个矩阵无法相加..."

return

addlist=[[0]*len(Matrix1)forrowinrange(len(Matrix1))]#定义新的矩阵大小

foriinrange(0,len(Matrix1)):

forjinrange(0,len(Matrix2)):

addlist[i][j]=Matrix1[i][j]+Matrix2[i][j]

returnaddlist

'''

矩阵与向量相乘

'''

defmultiMatrixVector(m,v):

rv=range(len(v))

forrowinrange(0,len(m)):

temp=0

forcolinrange(0,len(m[1])):

temp+=m[row][col]*v[col]

rv[row]=temp

returnrv

#公式

f1=multiGeneMatrix(alpha,S)

f2=multiGeneMatrix((1-alpha)/len(S[0]),U)

G=addMatrix(f1,f2)

 

printG#google矩阵

 

#迭代过程

count=0

while(True):

count=count+1

pr_next=multiMatrixVector(G,f)

print"第%s轮迭代"%count

printstr(round(pr_next[0],5))+"\t"+str(round(pr_next[1],5))+"\t"+str(round(pr_next[2],5))+"\t"+str(round(pr_next[3],5))

ifround(f[0],5)==round(pr_next[0],5)andround(f[1],5)==round(pr_next[1],5)andround(f[2],5)==round(pr_next[2],5)andround(f[3],5)==round(pr_next[3],5):

#当前向量与上次向量值偏差不大后,停止迭

break

f=pr_next

print"PageRank值已计算完成"

 

运行结果:

第1轮迭代

0.151.28330.85831.70831

第2轮迭代

0.151.644550.73791.46746

第3轮迭代

0.151.439830.891431.51864

第4轮迭代

0.151.483330.804421.56213

第5轮迭代

0.151.52030.822911.50666

第6轮迭代

0.149991.473150.838621.53809

第7轮迭代

0.149991.499860.818581.5314

第8轮迭代

0.149991.494180.829931.52572

第9轮迭代

0.149991.489350.827511.53295

第10轮迭代

0.149991.49550.825461.52885

第11轮迭代

0.149991.492010.828071.52971

第12轮迭代

0.149991.492740.826591.53045

第13轮迭代

0.149991.493370.82691.5295

第14轮迭代

0.149991.492560.827171.53003

第15轮迭代

0.149991.493010.826821.52991

第16轮迭代

0.149991.492910.827011.52981

第17轮迭代

0.149991.492820.826971.52993

第18轮迭代

0.149991.492920.826931.52986

第19轮迭代

0.149991.492860.826971.52987

第20轮迭代

0.149991.492870.826951.52987

第21轮迭代

0.149991.492870.826951.52985

第22轮迭代

0.149991.492850.826951.52986

第23轮迭代

0.149991.492860.826941.52985

第24轮迭代

0.149991.492850.826941.52984

第25轮迭代

0.149991.492840.826941.52984

第26轮迭代

0.149991.492840.826941.52983

第27轮迭代

0.149981.492840.826931.52983

第28轮迭代

0.149981.492830.826931.52982

第29轮迭代

0.149981.492830.826931.52982

PageRank值已计算完成

 

#coding=utf-8

#FileName:

MapReducePageRank.py

'''

模拟map-reduce的思想,实现AB物理节点的分布计算。

'''

#矩阵与乘因子

defmultiGeneMatrix(gene,Matrix):

result=[[0]*len(Matrix[0])forrowinrange(len(Matrix[0]))]#定义大小一样新的矩阵,初始化为0

foriinrange(0,len(Matrix[0])):

forjinrange(0,len(Matrix[0])):

result[i][j]=Matrix[i][j]*gene

returnresult

#两个矩阵相加

defaddMatrix(Matrix1,Matrix2):

iflen(Matrix1[0])!

=len(Matrix2[1]):

print"这两个矩阵无法相加..."

return

addList=[[0]*len(Matrix1[0])forrowinrange(len(Matrix1[0]))]

foriinrange(0,len(Matrix1[0])):

forjinrange(0,len(Matrix2[0])):

addList[i][j]=Matrix1[i][j]+Matrix2[i][j]

returnaddList

#两个矩阵合并

defaddColumnMatrix(Matrix1,Matrix2):

result=Matrix1+Matrix2

returnresult

#矩阵与向量相乘

defmultiMatrixVector(m,v):

rv=range(len(m))

forrowinrange(0,len(m)):

temp=0

forcolinrange(0,len(m[1])):

temp+=m[row][col]*v[col]

rv[row]=temp

returnrv

'''

按照map-reduce的思想,现在假设有物理节点A,B参与计算,其中网页1、2保存于A,网页3、4保存于B,试述完整的pagerank计算过程

'''

alpha=0.85#定义google权重值

aS=[[0,0],[0.3333,0],[0.3333,0.5],[0.3333,0.5]]#假设A节点存放page1page2网页原始矩阵

bS=[[0,0],[0,1],[0,0],[1,0]]#假设B节点存放page3page4网页原始矩阵

U=[[1,1],[1,1],[1,1],[1,1]]#全部为1的矩阵

n=len(aS)#得到网页个数

#计算A节点的G矩阵

fa1=multiGeneMatrix(alpha,aS)#google权重值与原始矩阵

fa2=multiGeneMatrix((1-alpha)/n,U)#(1-a)/n*U

aG=addMatrix(fa1,fa2)#aS+(1-a)/n*U

#计算B节点的G矩阵

fb1=multiGeneMatrix(alpha,bS)

fb2=multiGeneMatrix((1-alpha)/n,U)

bG=addMatrix(fb1,fb2)

#AB节点特征向量

qa_cur=[1,1]

qb_cur=[1,1]

count=1

while(True):

count=count+1

#得到A节点qG

#printaG

#printqa_cur

qa_next=multiMatrixVector(aG,qa_cur);

#得到B节点qG

qb_next=multiMatrixVector(bG,qb_cur);

#合并两个矩阵

qab_next=addColumnMatrix(qa_next,qb_next);

#小数位缩小到5位

qa_cur[0]=round(qa_cur[0],5)

qa_cur[1]=round(qa_cur[1],5)

qb_cur[0]=round(qb_cur[0],5)

qb_cur[1]=round(qb_cur[1],5)

qab_next[0]=round(qab_next[0],5)

qab_next[1]=round(qab_next[1],5)

qab_next[2]=round(qab_next[2],5)

qab_next[3]=round(qab_next[3],5)

#判断是否收敛到十分接近

ifqa_cur[0]==qab_next[0]andqa_cur[1]==qab_next[1]andqb_cur[0]==qab_next[2]andqb_cur[1]==qab_next[3]:

break

qa_cur[0]=qab_next[0]

qa_cur[1]=qab_next[1]

qb_cur[0]=qab_next[2]

qb_cur[1]=qab_next[3]

sum=qa_cur[0]+qa_cur[1]+qb_cur[0]+qb_cur[1]

print"P1="+str(qa_cur[0]/sum)

print"P2="+str(qa_cur[1]/sum)

print"P3="+str(qb_cur[0]/sum)

print"P4="+str(qb_cur[1]/sum)

print"第%s轮迭代。

"%count

运行结果:

.0523********

P2=0.249982557734

.0523********

P4=0.645363845671

第2轮迭代。

P1=0.0177595628415

P2=0.0409836065574

P3=0.0409836065574

P4=0.900273224044

第3轮迭代。

P1=0.00261177626645

P2=0.0085593855861

.0417********

P4=0.947066277055

第4轮迭代。

P1=0.000469766144541

P2=0.00132121728152

.0421********

P4=0.956106225869

第5轮迭代。

P1=8.26733246251e-05

P2=0.00023148530895

.0421********

P4=0.957522445808

第6轮迭代。

P1=1.86008444783e-05

P2=3.72016889567e-05

.0421********

P4=0.957776083034

第7轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957823385426

第8轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957835294118

第9轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957819528976

第10轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957828636052

第11轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957825679475

第12轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957837675049

第13轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.95783234547

第14轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957813541567

第15轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957802291957

第16轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957838944769

第17轮迭代。

P1=0.0

P2=0.0

P3=0.0422000948317

P4=0.957799905168

第18轮迭代。

P1=0.0

P2=0.0

P3=0.042203092862

P4=0.957796907138

第19轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957844229286

第20轮迭代。

P1=0.0

P2=0.0

P3=0.0422046637117

P4=0.957795336288

第21轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957841118457

第22轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957825451

第23轮迭代。

P1=0.0

P2=0.0

P3=0.042220699109

P4=0.957779300891

第24轮迭代。

P1=0.0

P2=0.0

P3=0.0422383227994

P4=0.957761677201

第25轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.9578637073

第26轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957878315133

第27轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957885501206

第28轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957819437593

第29轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957836338419

第30轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957878315133

第31轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957894736842

第32轮迭代。

P1=0.0

P2=0.0

P3=0.042225730071

P4=0.957774269929

第33轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957833999112

第34轮迭代。

P1=0.0

P2=0.0

.0419********

P4=0.958062905642

第35轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957888826502

第36轮迭代。

P1=0.0

P2=0.0

P3=0.042297979798

P4=0.957702020202

第37轮迭代。

P1=0.0

P2=0.0

.0419********

P4=0.958096590909

第38轮迭代。

P1=0.0

P2=0.0

P3=0.0423322683706

P4=0.957667731629

第39轮迭代。

P1=0.0

P2=0.0

P3=0.0422282120395

P4=0.95777178796

第40轮迭代。

P1=0.0

P2=0.0

P3=0.0424242424242

P4=0.957575757576

第41轮迭代。

P1=0.0

P2=0.0

P3=0.0420454545455

P4=0.957954545455

第42轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.95785440613

第43轮迭代。

P1=0.0

P2=0.0

.0416********

P4=0.958333333333

第44轮迭代。

P1=0.0

P2=0.0

P3=0.0420032310178

P4=0.957996768982

第45轮迭代。

P1=0.0

P2=0.0

.0418********

P4=0.958181818182

第46轮迭代。

P1=0.0

P2=0.0

P3=0.0428571428571

P4=0.957142857143

第47轮迭代。

P1=0.0

P2=0.0

.0413********

P4=0.958620689655

第48轮迭代。

P1=0.0

P2=0.0

.0413********

P4=0.958656330749

第49轮迭代。

P1=0.0

P2=0.0

.0434********

P4=0.95652173913

第50轮迭代。

P1=0.0

P2=0.0

P3=0.0424836601307

P4=0.957516339869

第51轮迭代。

P1=0.0

P2=0.0

P3=0.0404411764706

P4=0.959558823529

第52轮迭代。

P1=0.0

P2=0.0

.0413********

P4=0.95867768595

第53轮迭代。

P1=0.0

P2=0.0

.0418********

P4=0.958139534884

第54轮迭代。

P1=0.0

P2=0.0

.0418********

P4=0.958115183246

第55轮迭代。

P1=0.0

P2=0.0

.0411********

P4=0.958823529412

第56轮迭代。

P1=0.0

P2=0.0

P3=0.0397350993377

P4=0.960264900662

第57轮迭代。

P1=0.0

P2=0.0

P3=0.0444444444444

P4=0.955555555556

第58轮迭代。

P1=0.0

P2=0.0

.0416********

P4=0.958333333333

第59轮迭代。

P1=0.0

P2=0.0

P3=0.0467289719626

P4=0.953271028037

第60轮迭代。

P1=0.0

P2=0.0

.0421********

P4=0.957894736842

第61轮迭代。

P1=0.0

P2=0.0

.0470********

P4=0.952941176471

第62轮迭代。

P1=0.0

P2=0.0

P3=0.04

P4=0.96

第63轮迭代。

P1=0.0

P2=0.0

P3=0.044776119403

P4=0.955223880597

第64轮迭代。

P1=0.0

P2=0.0

P3=0.05

P4=0.95

第65轮迭代。

P1=0.0

P2=0.0

.0377********

P4=0.962264150943

第66轮迭代。

P1=0.0

P2=0.0

P3=0.0425531914894

P4=0.957446808511

第67轮迭代。

P1=0.0

P2=0.0

.0476********

P4=0.952380952381

第68轮迭代。

P1=0.0

P2=0.0

P3=0.0526315789474

P4=0.947368421053

第69轮迭代。

P1=0.0

P2=0.0

P3=0.030303030303

P4=0.969696969697

第70轮迭代。

P1=0.0

P2=0.0

P3=0.0344827586207

P4=0.965517241379

第71轮迭代。

P1=0.0

P2=0.0

P3=0.0384615384615

P4=0.961538461538

第72轮迭代。

P1=0.0

P2=0.0

.0434********

P4=0.95652173913

第73轮迭代。

P1=0.0

P2=0.0

.0476**

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1