python - 如何纠正计算加权页面排名时获得的 NaN 值?
问题描述
我正在尝试计算图表的加权页面排名。对于此计算,我使用以下代码:
import numpy as np
from scipy.sparse import csc_matrix
import random
def column(matrix, i):
return [row[i] for row in matrix]
def pageRank(G, s = 0.85, maxerr = .001):
n = G.shape[0]
M = csc_matrix(G,dtype=np.float)
rsums = np.array(M.sum(1))[:,0]
ri, ci = M.nonzero()
M.data /= rsums[ri]
sink = rsums==0
# Compute pagerank r until we converge
ro, r = np.zeros(n), np.ones(n)
while np.sum(np.abs(r-ro)) > maxerr:
ro = r.copy()
# calculate each pagerank at a time
for i in range(0,n):
# inlinks of state i
Ii = np.array(M[:,i].todense())[:,0]
# account for sink states
Si = sink / float(n)
# account for teleportation to state i
Ti = np.ones(n) / float(n)
# Weighted PageRank Equation
r[i] = ro.dot( Ii*s + Si*s*G[i] + Ti*(1-s))
# return normalized pagerank
return r/sum(r)
if __name__=='__main__':
G = np.array([[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]])
print(pageRank(G,s = 1))
print(G)
以下代码的输出是:
[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan]
但是,当为这样的不同图表完成时:
[[1,1,0,0,0,0,0],
[1,1,0,0,0,0,0],
[0,0,1,0,0,0,0],
[0,0,0,1,0,0,0],
[0,0,0,0,1,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,1,1]]
获得以下输出:
[1.99979908e-01 1.99979908e-01 1.99979908e-01 1.99979908e-01
1.99979908e-01 5.02299201e-05 5.02299201e-05]
谁能指出我做错了什么或需要如何修改代码?谢谢!
解决方案
推荐阅读
- python - build() 和 on_start() 方法之间的区别
- java - 如何使用 ExecutorService 在多个线程中将元素正确添加到 ConcurrentHashMap
- python-3.x - 响应选择器将内容分成两个不同的值
- wordpress - wordpress 单选按钮和下拉菜单
- autohotkey - Autohotkey 循环向下键/文件夹文件
- javascript - 是否有任何正常的解决方案来编辑列表 Aerospike 中的地图
- reactjs - 取消订阅 Paypal API + Axios + React
- javascript - 如何匹配url中的可选参数?
- swiftui - NavigationView SwiftUI 顶部的空白区域
- c - C:嵌套的do while循环没有正确循环