我正在使用R cosine()函数{“lsa”package}来确定存储在稀疏矩阵中的2个向量之间的相似性。每个矩阵有240,000行,3100列。 1000行的计算时间约为2分钟,这意味着完整数据集的处理时间为8小时。我正在寻找加快处理时间的方法,因为我必须多次运行它。
这是我的代码:
t1 <- Sys.time()
for (i in 1:NROWS) {
title_cosine_sim[i] <- cosine(dtm_search[i,],dtm_title[i,])
desc_cosine_sim[i] <- cosine(dtm_search[i,], dtm_desc[i, ])
if (i%%1000 == 0 ) {
cat("processed ", i, "rows out of 240,760...", system.time(), "\n")
}
}
print( difftime( Sys.time(), t1, units = 'sec'))
cat("finish")
我尝试使用并行处理,但它没有加快这个过程:
c1 <- makeCluster(4)
registerDoParallel(c1)
#calculate title similarity vector
t1 <- Sys.time()
title_cosine_sim <- foreach(z = 1:NUMROWS, .combine = 'rbind', .packages = c('lsa', 'Matrix')) %dopar% {
cosine( dtm_search[z,], dtm_title[z,] )
}
# calculate description similarity vector
t1 <- Sys.time()
desc_cosine_sim <- foreach(z = 1:NUMROWS, .combine = 'rbind', .packages = c('lsa', 'Matrix')) %dopar% {
cosine( dtm_search[z,],dtm_title[z,] )
}
stopCluster(c1)
print( difftime( Sys.time(), t1, units = 'sec'))
cat("finish PARALLEL processing")
上述每个循环在1000行中花费大约65秒。所以这里没有多少节省......
欢迎使用并行计算或其他方式改进代码的任何想法。 谢谢!
P.S。戴尔4核,16G内存,Windows 10.