Vom Konzept her sind die meisten Werte in einem spärlichen Vektor null, in einem dichten Vektor nicht. Gleiches gilt für dichte und dünn besetzte Matrizen. Die Begriffe spärlich und dichten beschreiben allgemein diese Eigenschaften, nicht nur in Mahout.
In Mahout nimmt die DenseVector
nicht zu viele Null-Einträge an und daher "Implementiert Vektor als ein Array von Doubles" (org.apache.mahout.math.DenseVector). Im Gegensatz dazu sind die spärlichen Vektorimplementierungen von AbstractVector
, z.B. RandomAccessSparseVector
und SequentialAccessSparseVector
verwenden Sie unterschiedliche Datenstrukturen, die die Nullwerte überhaupt nicht speichern.
Welcher zu nehmen ist, hängt von den Daten ab, die Sie in dem Vektor speichern möchten. Wenn Sie überwiegend Nullwerte erwarten, wäre eine spärliche Vektorimplementierung platzsparender. Wenn Sie sie jedoch für Daten mit nur wenigen Nullwerten verwenden, führen Sie eine Menge Datenstruktur-Overhead ein, was zu einer schlechteren Performance führen kann.
Die Wahl von dichtem gegenüber dünnem Vektor hat keinen Einfluss auf die Berechnungsergebnisse auf den Vektoren, nur die Speicherbelegung und die Berechnungsgeschwindigkeit.