我正在尝试为网络网络建立邻接矩阵,以通过pagerank算法确定最受欢迎的网站。
为了运行该算法,我需要从一个.txt文件创建一个邻接矩阵,该矩阵包含页面之间的链接,我使用igraph包做了如下操作:
A_h = graph_from_data_frame(hollins)
A_h = as_adjacency_matrix(A_h)
要能够运行算法,我首先需要通过将页面链接到自身来确保没有页面具有全0。为此,我使用了此for循环:
for(i in 1:nrow(A_h)){
if(rowSums(A_h) == 0){
A_h[i,i] = 1}
然后,我需要通过确保行的条目总计为1来对行进行规范化:
norm_A_h = A_h/rowSums(A_h)
我尝试在虚拟的简单矩阵上执行此操作,效果很好:
T = matrix(c(0, 3, 4, 0, 8, 4, 0, 4, 5), nrow = 3, ncol = 3)
for(i in 1:nrow(T)){
if(rowSums(T) == 0){
T[i,i] = 1}
}
which(rowSums(A_h)==0)
T = T/rowSums(T)
但是,当我尝试在稀疏矩阵上运行它时,看起来我仍然在检查完之后仍然以所有0行结尾:
which(rowSums(A_h)==0)
关于为什么它不适用于稀疏矩阵的任何想法?