首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用data.table和quanteda包进行稀疏矩阵乘法?

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

Stack Overflow用户
提问于 2017-01-09 15:22:06
回答 2查看 504关注 0票数 0

我试图用稀疏矩阵和称为quanteda的包创建一个矩阵乘法,它使用data.table包,与这个线程here相关。所以

代码语言:javascript
复制
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))

如何使矩阵乘法在这里与量子包和稀疏矩阵一起工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-09 19:00:51

这样做很好:

代码语言:javascript
复制
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“对象,因为它不再是按特性排列的文档矩阵。

票数 1
EN

Stack Overflow用户

发布于 2017-01-09 15:41:12

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

代码语言:javascript
复制
as.matrix(myMatrix) %*% t(as.matrix(myMatrix))

另外,正如所评论的,as.matrix是非稀疏的,而矩阵::矩阵是稀疏的,但是这里没有必要,所以更好。

代码语言:javascript
复制
myMatrix %*% t(myMatrix)

而且有可能更好

代码语言:javascript
复制
crossprod(myMatrix) 
tcrossprod(myMatrix) 

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41551216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档