zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    洛谷 P1084 疫情控制 —— 二分+码力
    CF 600 E Lomsat gelral —— 树上启发式合并
    HBase框架基础(二)
    Shell脚本
    Kafka框架基础
    HUE搭配基础
    Oozie框架基础
    Sqoop框架基础
    Flume框架基础
    Hive框架基础(二)
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/10897165.html
Copyright © 2011-2022 走看看