小编E.M*_*itz的帖子

在R中的矩阵中的特定列对之间应用函数

我在R中使用lsa包生成矩阵.创建矩阵后,我想计算矩阵中特定文档对(列)之间的余弦相似度.

目前,我使用嵌套的for循环执行此操作,并且速度非常慢.在下面的代码中,有150个sourceID和6413个targetID,总共961.950个比较.在我的数字碾压机上一个半小时后,它只能通过~300k.

有关详细信息,sourceIDtargetID是列名称的向量,从包含这些名称的两个文件加载.我想在所有源 - >目标对之间应用余弦函数.列由文档名称索引,文档名称是字符串.

我确信使用apply有一个更快的方法,但是我无法绕过它.

library(lsa)

# tf function
real_tf <- function(m)
{
    return (sweep(m, MARGIN=2, apply(m, 2, max), "/"))
}

#idf function
real_idf <- function(m)
{
    df = rowSums(lw_bintf(m), na.rm=TRUE)
    return (log(ncol(m)/df))
}

#load corpus
lsa.documents <- textmatrix(args[1], minWordLength=1, minDocFreq=0)

# compute tf-idf
lsa.weighted_documents <- real_tf(lsa.documents) * real_idf(lsa.documents)

# compute svd
lsa.nspace <- lsa(lsa.weighted_documents, dims = as.integer(args[5]))
lsa.matrix <- diag(lsa.nspace$sk) %*% t(lsa.nspace$dk)

# compute …
Run Code Online (Sandbox Code Playgroud)

r matrix apply lsa

3
推荐指数
1
解决办法
1332
查看次数

标签 统计

apply ×1

lsa ×1

matrix ×1

r ×1