我正在尝试使用稀疏矩阵创建一个矩阵多重复制,并使用名为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包和稀疏矩阵得到矩阵乘法?
答案 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”对象,因为它不再是按功能排列的文档矩阵。