R:使用data.table和quanteda包进行稀疏矩阵乘法?

时间:2017-01-09 15:22:06

标签: r matrix data.table sparse-matrix quanteda

我正在尝试使用稀疏矩阵创建一个矩阵多重复制,并使用名为quanteda的包,利用与此线程here相关的data.table包。所以

require(quanteda) 

mytext <- c("Let the big dogs hunt", "No holds barred", "My child is an honor student")     
myMatrix <-dfm(mytext, ignoredFeatures = stopwords("english"), stem = TRUE) #a data.table
as.matrix(myMatrix) %*% transpose(as.matrix(myMatrix))

如何使用quanteda包和稀疏矩阵得到矩阵乘法?

2 个答案:

答案 0 :(得分:1)

使用t命令而非transpose命令进行矩阵乘法,以便

as.matrix(myMatrix) %*% t(as.matrix(myMatrix))

同样评论,as.matrix是非稀疏的,而Matrix :: matrix稀疏但在这里不必要,所以更好

myMatrix %*% t(myMatrix)

甚至可能更好

crossprod(myMatrix) 
tcrossprod(myMatrix) 

但它需要数字/复杂矩阵/向量参数,而不是使用问题中的示例:

require(quanteda)  
mytext <- c("Let the big dogs hunt", "No holds barred", "My child is an honor student")      
myMatrix <-dfm(mytext, ignoredFeatures = stopwords("english"), stem = TRUE) 
crossprod(myMatrix) 
tcrossprod(myMatrix)

答案 1 :(得分:1)

这很好用:

mytext <- c("Let the big dogs hunt", 
            "No holds barred", 
            "My child is an honor student")     
myMatrix <- dfm(mytext)

myMatrix %*% t(myMatrix)
## 3 x 3 sparse Matrix of class "dgCMatrix"
##       text1 text2 text3
## text1     5     .     .
## text2     .     3     .
## text3     .     .     6

无需使用as.matrix()强制使用密集矩阵。请注意,它不再是“dfmSparse”对象,因为它不再是按功能排列的文档矩阵。