2015-07-20 115 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/

感謝