Разреженный вектор против плотного вектора

Как создать SparseVector и плотное векторное представление

если DenseVector это:

denseV = np.array([0., 3., 0., 4.])

Каким будет представление разреженного вектора?


person Anoop Toffy    schedule 20.07.2015    source источник
comment
Для тех, кто прочитал заголовок «Разреженный вектор против плотного вектора» и искал объяснение того, когда что использовать, этот ответ есть информация, которую вы ищете.   -  person Nick Chammas    schedule 28.07.2016


Ответы (2)


Если я полностью не понял ваших сомнений, документация по типу данных MLlib иллюстрирует это довольно ясно:

import org.apache.spark.mllib.linalg.Vector;
import org.apache.spark.mllib.linalg.Vectors;

// Create a dense vector (1.0, 0.0, 3.0).
Vector dv = Vectors.dense(1.0, 0.0, 3.0);
// Create a sparse vector (1.0, 0.0, 3.0) by specifying its indices and values corresponding to nonzero entries.
Vector sv = Vectors.sparse(3, new int[] {0, 2}, new double[] {1.0, 3.0});

Где второй аргумент Vectors.sparse — это массив индексов, а третий аргумент — это массив фактических значений этих индексов.

person Chthonic Project    schedule 20.07.2015
comment
О, я не прошел правильный подсчет индексов. SparseV = SparseVector(4, [0, 1, 2, 3], [0., 3., 0., 4.]) - person Anoop Toffy; 21.07.2015
comment
что означает точка после цифры т.е. 1. ? - person Anoop Toffy; 24.07.2015
comment
Точка просто указывает тип с плавающей запятой. 1. эквивалентно 1.0 - person Abhinav Sood; 20.10.2016
comment
@MohitShah (i) Это буквально первый пример кода в связанной документации, и (ii) ответ также включает пример, показывающий, как именно создать разреженный вектор. - person Chthonic Project; 26.04.2019

Разреженные векторы - это когда у вас есть много значений в векторе как ноль. В то время как плотный вектор - это когда большинство значений в векторе отличны от нуля.

Если вам нужно создать разреженный вектор из указанного вами плотного вектора, используйте следующий синтаксис:

import org.apache.spark.mllib.linalg.Vector;
import org.apache.spark.mllib.linalg.Vectors;

Vector sparseVector = Vectors.sparse(4, new int[] {1, 3}, new double[] {3.0, 4.0});
person Saurabh    schedule 13.04.2017