2017-01-09 8 views
0

Я пытаюсь создать матричную умножение с разреженной матрицей и с пакетом под названием кванда, используя пакет data.table, относящийся к этой теме here. Таким образом,R: разреженное умножение матрицы с помощью пакета data.table и quanteda?

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)) 

Как вы можете заставить матричное умножение работать здесь с пакетом кванда и разреженными матрицами? Команда

+1

@ Roland quanteda возвращает данные.table объект. – hhh

ответ

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», поскольку он больше не является матрицей документов по функциям.

0

t Использования, не transpose команды, для умножения матриц такого, что

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

также, как отметил, as.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) 
+2

Кроме того, 'as.matrix' не будет создавать разреженную матрицу. Вместо этого используйте «Matrix :: Matrix». – dww

+0

@dww супер важный пункт, спасибо! +1 Как «Матрица :: Матрица» отличается от «Matrix :: sparseMatrix»? – hhh

+0

Я не familar wth quantega, но я только что установил его, и кажется, что 'dfm' уже возвращает разреженную матрицу класса 'dfm-class'. В этом случае все, что вам нужно, это 'myMatrix% *% t (myMatrix)'. Используете ли вы старую версию квантования, в которой вы возвращаете data.table? Также в моей версии аргумент 'ignoredFeatures' игнорируется. – dww