2017-01-09 4 views
0

Ich versuche, eine Matrix-Manipulation mit Sparse-Matrix und mit dem Paket namens Quanteda, mit data.table-Paket, im Zusammenhang mit diesem Thread here. AlsoR: Sparse Matrix Multiplikation mit data.table und quanteda-Paket?

Wie können Sie die Matrix-Multiplikation hier mit Quanteda-Paket und dünn besetzten Matrizen arbeiten?

+1

@Roland quanteda gibt das Objekt data.table zurück. – hhh

Antwort

1

Dies funktioniert gut:

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 

Keine Notwendigkeit zu einer dichten Matrix zu zwingen as.matrix() mit . Beachten Sie, dass es kein "dfmSparse" -Objekt mehr ist, da es nicht mehr eine Matrix von Dokumenten nach Features ist.

0

Verwenden t Befehl, nicht transpose Befehl, für die Matrixmultiplikation, so dass

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

auch kommentiert, as.matrix ist nicht spärlich, während Matrix :: Matrix spärlich ist aber nicht notwendig hier, also besser

myMatrix %*% t(myMatrix) 

und möglicherweise sogar besser

crossprod(myMatrix) 
tcrossprod(myMatrix) 

aber es numerisch/komplexe Matrix/Vektor Argumente erfordert, nicht mit dem Beispiel in der Frage arbeiten:

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

Außerdem wird 'as.matrix' keine spärliche Matrix erzeugen. Verwenden Sie stattdessen "Matrix :: Matrix". – dww

+0

@dww super wichtiger Punkt, danke! +1 Wie unterscheidet sich Matrix :: Matrix von Matrix :: sparseMatrix? – hhh

+0

Ich bin nicht vertraut mit Quantega, aber ich habe es gerade installiert, und es scheint, dass 'dfm' bereits eine spärliche Matrix der Klasse 'dfm-Klasse' zurückgibt. In diesem Fall brauchen Sie nur 'myMatrix% *% t (myMatrix) '. Verwenden Sie eine alte Version von quantega, die eine data.table zurückgegeben wird? Auch in meiner Version wird das 'ignoredFeatures' Argument ignoriert. – dww

Verwandte Themen