Frage

Nach dem Lernen über die Optionen für die mit spärlichen Matrizen in R Arbeits , ich mag das Matrix Paket verwenden, eine erstellen sparse-Matrix aus dem folgenden Datenrahmen und haben alle andere Elemente NA werden.

     s    r d
1 1089 3772 1
2 1109  190 1
3 1109 2460 1
4 1109 3071 2
5 1109 3618 1
6 1109   38 7

Ich weiß, ich kann eine spärliche Matrix mit dem folgenden erstellen, Elementen wie gewohnt Zugriff auf:

> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0

aber wenn ich den Standardwert sein NA haben wollen, habe ich versucht, die folgenden:

  M <- Matrix(NA,max(s),max(r),sparse=TRUE)
  for (i in 1:nrow(X))
    M[s[i],r[i]] <- d[i]

und bekam diesen Fehler

Error in checkSlotAssignment(object, name, value) : 
  assignment of an object of class "numeric" is not valid for slot "x" in an object of class "lgCMatrix"; is(value, "logical") is not TRUE

Nicht nur das, finde ich, dass man viel mehr Elemente Zugriff nimmt.

> system.time(Y[3,3])
   user  system elapsed 
  0.000   0.000   0.003 
> system.time(M[3,3])
   user  system elapsed 
  0.660   0.032   0.995 

Wie soll ich diese Matrix erschaffen? Warum ist eine Matrix so viel langsamer, mit zu arbeiten?

Hier ist der Code-Schnipsel für die obigen Daten:

X <- structure(list(s = c(1089, 1109, 1109, 1109, 1109, 1109), r = c(3772, 
190, 2460, 3071, 3618, 38), d = c(1, 1, 1, 2, 1, 7)), .Names = c("s", 
"r", "d"), row.names = c(NA, 6L), class = "data.frame")
War es hilfreich?

Lösung

Ja, Antwort Thierry ist definitiv wahr, dass ich als Co-Autor des ‚Matrix‘ Pakets sagen kann ...

Um Ihre andere Frage: Warum ist „M“ langsamer als „Y“ zugreifen? Die wichtigste Antwort ist, dass „M“ ist viel viel spärlicher als „Y“ daher viel kleiner und - je nach envolved Größen und der RAM Ihrer Plattform - die Zugriffszeit schneller für viel kleinere Objekte, insbesondere für die Indizierung in sie .

Andere Tipps

Warum wollen Sie NA-Werte Standard? Soweit ich weiß, Matrizen sind nur spärlich, wenn sie Null-Zellen haben. Wie NA ein Wert ungleich Null ist, verlieren Sie alle Vorteile aus der Sparse Matrix. Eine klassische Matrix ist noch effizienter, wenn die Matrix kaum Nullen hat. Eine klassische Matrix ist wie ein Vektor, der entsprechend den Abmessungen geschnitten wird. So hat es nur den Datenvektor und die Abmessungen zu speichern. Die Sparse Matrix speichert nur die Nicht-Null-Werte, sondern auch speichert dort Lage. Dies ist ein Vorteil, wenn und nur wenn man genug Nullwerte hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top