dense向量和稀疏向量sparse



  



 

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

object Test {
  def main(args: Array[String]) {
    val vd = Vectors.dense(2, 5, 8)
    println(vd(1))
    println(vd)

    //向量個數,序號,value
    val vs = Vectors.sparse(4, Array(0, 1, 2, 3), Array(9, 3, 5, 7))
    println(vs(0)) //序號訪問
    println(vs)

    val vs2 = Vectors.sparse(4, Array(0, 2, 1, 3), Array(9, 3, 5, 7))
    println(vs2(2))
    println(vs2)
  }
}

5.0
[2.0,5.0,8.0]
9.0
(4,[0,1,2,3],[9.0,3.0,5.0,7.0])
3.0
(4,[0,2,1,3],[9.0,3.0,5.0,7.0])

本地向量(Local Vector)存儲在單台機器上,索引采用0開始的整型表示,值采用Double類型的值表示。Spark MLlib中支持兩種類型的矩陣,

分別是密度向量(Dense Vector)和稀疏向量(Spasre Vector),密度向量會存儲所有的值包括零值,而稀疏向量存儲的是索引位置及值,

不存儲零值,在數據量比較大時,稀疏向量才能體現它的優勢和價值。下面給出其應用示例:

 
        
spark 稠密向量和稀疏向量
Spark mlib的本地向量有兩種: DenseVctor :稠密向量 其創建方式 Vector.dense(數據) SparseVector :稀疏向量 其創建方式有兩種:   方法一:Vector.sparse(向量長度,索引數組,與索引數組所對應的數值數組)   方法二:Vector.sparse(向量長度,(索引,數值),(索引,數值),(索引,數值),...(索引,數值)) 示例: 比如向量(1,0,3,4)的創建有三種方法: 稠密向量:直接Vectors.dense(1,0,3,4) 稀疏向量: 方法一:Vector.sparse(4,(0,2,3),(1,3,4)) (0,2,3)     表示該向量的第0個,第2個,第3個位置,(1,3,4) 表示(0,2,3)位置對應的數值分別為1,3,4 方法二:Vector.sparse(4,(0,1),(2,3),(3,4))     (0,1)就是(索引,數值)的形式。位置0的數值為1, 位置2的數值為3,位置3的數值為4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM