--Organisation du vecteur clairsemé et du vecteur dense d'Apache Spark
Sparse signifie «écraser».
Lorsque les éléments d'un vecteur contiennent plusieurs 0 Par exemple
[0.1,0.0,0.0,0.0,0.3]
Quand il y avait un vecteur
Pour exprimer ce vecteur
"** La valeur du premier élément est 0,1 **, la valeur du dernier élément est 0,3 ** et le nombre d'éléments est 5 **."
Il est basé sur l'idée que l'information est suffisante. (Les valeurs des autres éléments sont ** 0,0 **)
De cette manière, la quantité d'informations peut être réduite, donc l'avantage est que ** la mémoire peut être économisée **.
Quelque chose comme un vecteur clairsemé est implémenté dans la plupart des bibliothèques d'apprentissage automatique.
Désormais, il est facile de créer un vecteur clairsemé dans Spark.
Utilisez ** org.apache.spark.ml.linalg.SparseVector ** dans le package ** spark.ml **.
La classe ** SparseVector ** s'initialise avec un tableau d'index (indices) et un tableau de valeurs (valeurs)
Si vous voulez créer [0.1,0.0,0.0,0.0,0.3]
, tableau d'index (indices) `` new int [] {0, 2} '' et tableau de valeurs (valeurs) `nouveau double C'est OK si vous initialisez avec [] {0.1, 0.5} ''
SparseVector
// SparseVector(Vecteur clairsemé)
int size = 3;//Taille de l'élément vectoriel
int[] indices = new int[] { 0, 4 };
double[] svalues = new double[] { 0.1, 0.5 };
Vector svec = new SparseVector(size, indices, svalues);
System.out.println("SparseVector=" + Arrays.toString(svec.toArray()));
Résultat d'exécution
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Il peut être mis en réseau avec `` Vector # toArray '', mais bien sûr, la mémoire consommée est enregistrée car seuls les indices (tableau d'indices) et les valeurs (tableau de valeurs) sont conservés lorsqu'ils ne sont pas nécessaires.
Associez-le au vecteur clairsemé. Il contient toutes les valeurs des éléments du vecteur comme un tableau général.
[0.1,0.0,0.0,0.0,0.3]
Dense Vecotr s'initialise en spécifiant un tableau de valeurs (valeurs)
Si vous voulez créer [0,1, 0,0, 0,0, 0,0, 0,3] '', passez le tableau
nouveau double [] {0,1, 0,0, 0,0, 0,0, 0,5} '' du nombre d'éléments. Est un vecteur dense
DenseVector
// DenseVector(Vecteur dense)
double[] dvalues = new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 };
Vector dvec = new DenseVector(dvalues);
System.out.println("DenseVector=" + Arrays.toString(dvec.toArray()));
Résultat d'exécution
DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Utilisez ** Apache Spark ** à partir de Java
SparkVectorExamples.java
package org.riversun.spark;
import java.util.Arrays;
import org.apache.spark.ml.linalg.DenseVector;
import org.apache.spark.ml.linalg.SparseVector;
import org.apache.spark.ml.linalg.Vector;
public class SparkVectorExamples {
public static void main(String[] args) {
// DenseVector(Vecteur dense)
double[] dvalues = new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 };
Vector dvec = new DenseVector(dvalues);
System.out.println("DenseVector=" + Arrays.toString(dvec.toArray()));
// SparseVector(Vecteur clairsemé)
int size = 5;//Taille de l'élément vectoriel
int[] indices = new int[] { 0, 4 };
double[] svalues = new double[] { 0.1, 0.5 };
Vector svec = new SparseVector(size, indices, svalues);
System.out.println("SparseVector=" + Arrays.toString(svec.toArray()));
}
}
Résultat d'exécution
DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Recommended Posts