2016-05-14 12 views
-2
library(Matrix) 
a<-data.frame(1:1000) 
object.size(a) 
    4672 bytes 

b<-as.matrix(a) 
object.size(b) 
    4464 bytes 

d<-as(b,'dgCMatrix') 
object.size(d) 
    13520 bytes 

e<-Matrix(b, sparse = TRUE) 
object.size(e) 
13520 bytes 

Kann mir jemand sagen, warum die Größe meines Datenrahmens zunimmt, wenn ich es in eine spärliche Matrix umwandelte?Konvertieren von Datenrahmen in Sparse-Matrix dreifache Größe

Wird die Sparse-Matrix-Konvertierung nutzlos, wenn es in unserem Datenrahmen keine oder weniger Nullen gibt? Ich möchte, dass eine Matrix in xgboost eingeht.

Können Sie mir andere Speicherspartricks sagen, da die Sparse-Matrix-Konvertierung in diesem Fall fehlgeschlagen ist? bitte Anleitung

+1

Soweit ich weiß, speichert 'Sparse Matrix' Speicher nur, wenn es spärlich ist? Deine Matrix ist offensichtlich eine dichte Matrix, wie würdest du erwarten, dass sie dir Speicher spart? – Psidom

+0

@Psidom ist absolut richtig; und wenn Sie nach Möglichkeiten suchen, eine dichte Matrix zu komprimieren: Solche Methoden existieren für viele Fälle, aber dies ist ein komplexes Thema. Ihre Anwendbarkeit hängt vom Kontext ab, d. H. Von der Verwendung der Daten in der Matrix. Ein beliebtes Beispiel ist die Komprimierung von Bilddateien. – RHertel

Antwort

2

Sparse Matrizen sind - per Definition - Matrizen, in denen die meisten Einträge Null sind. Bei großen und dünn besetzten Matrizen können die Rechenressourcen hinsichtlich Rechenzeit und Speicherbedarf durch Darstellung der Daten in einem komprimierten Schema deutlich reduziert werden.

Ein häufig verwendetes und relativ einfaches Sparse-Matrix-Komprimierungsschema besteht die Matrix als drei Vektoren in repräsentieren:

  • Ein Vektor, der die Werte alles Nicht-Null-Einträge in der Matrix enthält.
  • Zwei weitere Vektoren enthalten den Zeilen- bzw. Spaltenindex und definieren damit die Position der im ersten Vektor aufgeführten Nicht-Null-Werte in der Matrix.

Durch die Verwendung solcher Komprimierungsschemata kann die Speicherung zahlreicher Nullen vermieden werden. Darüber hinaus ist es mit diesen Darstellungen möglich, mehrere unbrauchbare numerische Operationen wie zeitraubende Multiplikationen mit Null zu überspringen. Daher sind spärliche Matrixkomprimierungsschemata sehr leistungsfähig, wenn die Matrix ausreichend groß und spärlich ist .

Die Anwendung einer dünn besetzten Matrixkomprimierungsmethode auf eine dichte Matrix ist jedoch nicht sinnvoll. Der Grund ist, dass der erste Vektor dann im Wesentlichen die Größe der ursprünglichen Matrix hat. Außerdem gibt es dann zwei ganzzahlige Vektoren gleicher Größe. Dies stimmt mit Ihrer Beobachtung überein, dass die Gesamtgröße ungefähr verdreifacht.

Verwandte Themen