2015-07-20 112 views
6

如何创建SparseVector和密集的矢量表示稀疏向量VS密集矢量

如果DenseVector是:

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

什么将是稀疏向量表示?

+1

对于那些谁读“稀疏向量VS密集矢量”的称号,并正在寻找的时候使用它,[这个答案](HTTP的解释://计算器。 com/a/26706528/877069)提供您正在查找的信息。 –

回答

11

除非我已经彻底误解了您的疑问,MLlib data type documentation说明了这一点很清楚:

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第二个参数是索引数组,第三个参数是实际值的数组在这些指数。

+0

哦,我没有通过正确的指数。 SparseV = SparseVector(4,[0,1,2,3],[0,3,0,4]) –

+1

数字之后的点的意义是什么? –

+1

点只是表示浮点类型。 '1.'等同于'1.0' –

5

稀疏矢量是指当矢量中的许多值为零时。密集向量是向量中的大多数值不为零时。

如果你需要创建从您指定的密集向量稀疏向量,请使用以下语法:

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

以下链接是获得整体概念有很好的理解非常有用。

http://techchai.com/2017/03/13/sparse-vectors-in-apache-spark/

感谢