我是这个平台的新手,我希望有人可以在这个问题上帮助我。 我需要通过某种 apply 函数替换以下 for loops ,因为它运行速度太慢。
X = dim(m)
Y_TFIDF = matrix(0, X[1], X[2])
for (i in 1 : X[1]) {
maxNumTerms = which(m[i, ] > 0)
docSize = sum(m[i, maxNumTerms])
for (j in 1 : X[2]) {
if (m[i, j] > 0) {
DF = length( m[ which(m[ ,j] > 0) ] )
Y_TFIDF[i, j] = (m[i, j] / docSize) * log( X[1] / (1 + DF) )
}
else {
Y_TFIDF[i, j] = 0
}
}
}
感谢您的帮助。
答案 0 :(得分:0)
我不知道我是否正确阅读了您的代码,但也许这可行:
#creating a random m
m<-matrix(runif(100*30,-1,1),nrow=100)
docsize<-rowSums(m*(m>0))
docsize[docsize==0]<-1
res1<-m/docsize*log(nrow(m)/(1+rep(colSums(m>0),each=nrow(m))))*(m>0)
关注您的代码并创建Y_TFIDF
,结果为:
identical(res1,Y_TFIDF)
#[1] TRUE