Dal punto di vista concettuale, la maggior parte dei valori in un vettore sparse sono zero, in un vettore denso non lo sono. Lo stesso per matrici dense e sparse. I termini sparsi e denso descrivono generalmente queste proprietà, non solo in Mahout.
In Mahout il DenseVector
presuppone non troppe voci zero e pertanto "Implementa vettore come una matrice di doppi" (org.apache.mahout.math.DenseVector). Al contrario, le implementazioni vettoriali sparse di AbstractVector
, ad es. RandomAccessSparseVector
e SequentialAccessSparseVector
, utilizzare strutture dati differenti che non memorizzano affatto i valori zero.
Quale da prendere dipende dai dati che si desidera memorizzare nel vettore. Se ci si aspetta valori per lo più pari a zero, un'implementazione vettoriale sparsa sarebbe più efficiente in termini di spazio, tuttavia se la si utilizza per dati con pochi valori zero, si introduce un sovraccarico di struttura dei dati che potrebbe causare prestazioni peggiori.
La scelta del vettore denso rispetto a quello sparse non influisce sui risultati del calcolo sui vettori, ma solo sull'utilizzo della memoria e sulla velocità di calcolo.
fonte
2014-11-03 01:27:08