zoukankan      html  css  js  c++  java
  • 本地矩阵(Local Matrix)

    本地矩阵具有整型的行、列索引值和双精度浮点型的元素值,它存储在单机上。MLlib支持稠密矩阵DenseMatrix稀疏矩阵Sparse Matrix两种本地矩阵,稠密矩阵将所有元素的值存储在一个列优先(Column-major)的双精度型数组中,而稀疏矩阵则将非零元素以列优先的CSC(Compressed Sparse Column)模式进行存储,关于CSC等稀疏矩阵存储方式的具体实现,可以参看:

    https://www.tuicool.com/articles/A3emmqi

    或者

    http://www.cs.colostate.edu/~mcrob/toolbox/c++/sparseMatrix/sparse_matrix_compression.html

    本地矩阵的基类是org.apache.spark.mllib.linalg.MatrixDenseMatrixSparseMatrix均是它的实现类,和本地向量类似,MLlib也为本地矩阵提供了相应的工具类Matrices,调用工厂方法即可创建实例:

     1 scala>import org.apache.spark.mllib.linalg.{Matrix, Matrices}
     2 import org.apache.spark.mllib.linalg.{Matrix, Matrices}
     3 // 创建一个3行2列的稠密矩阵[ [1.0,2.0], [3.0,4.0], [5.0,6.0] ]
     4 // 请注意,这里的数组参数是列先序的!
     5 scala> val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0))
     6 dm: org.apache.spark.mllib.linalg.Matrix =
     7 1.0  2.0
     8 3.0  4.0
     9 5.0  6.0
    10  

    这里可以看出列优先的排列方式,即按照列的方式从数组中提取元素。也可以创建稀疏矩阵:

     1 // 创建一个3行2列的稀疏矩阵[ [9.0,0.0], [0.0,8.0], [0.0,6.0]]
     2 // 第一个数组参数表示列指针,即每一列元素的开始索引值
     3 // 第二个数组参数表示行索引,即对应的元素是属于哪一行
     4 // 第三个数组即是按列先序排列的所有非零元素,通过列指针和行索引即可判断每个元素所在的位置
     5 scala> val sm: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 2, 1), Array(9, 6, 8))
     6 sm: org.apache.spark.mllib.linalg.Matrix =
     7 3 x 2 CSCMatrix
     8 (0,0) 9.0
     9 (2,1) 6.0
    10 (1,1) 8.0

     9  0

    0  8

    0  6

    0 1 3

    这里,创建一个3行2列的稀疏矩阵[ [9.0,0.0], [0.0,8.0], [0.0,6.0]]。Matrices.sparse的参数中,3表示行数,2表示列数。第1个数组参数表示列指针,即每一列元素的开始索引值, 第二个数组参数表示行索引,即对应的元素是属于哪一行;第三个数组即是按列先序排列的所有非零元素,通过列指针和行索引即可判断每个元素所在的位置。比如取每个数组的第2个元素为2,1,6,表示第2列第1行的元素值是6.0。

    注:第一个数组参数表示列指针详细解释:

    列偏移表示某一列的第一个非0元素在values里面的起始偏移位置。在列偏移的最后补上矩阵总的非0元素个数。

    0 1 3 6 9 11 14

    1 2 4 7 10 12 15

     

     1 //下列矩阵
     2 
     3 1.0 0.0 4.0
     4 
     5 0.0 3.0 5.0
     6 
     7 2.0 0.0 6.0
     8 
     9 如果采用稀疏矩阵存储的话,其存储信息包括: 实际存储值: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]`,
    10 
    11 矩阵元素对应的行索引:rowIndices=[0, 2, 1, 0, 1, 2]`
    12 
    13 列起始位置索引: `colPointers=[0, 2, 3, 6]`.
    14 
    15 scala> val sparseMatrix= Matrices.sparse(3, 3, Array(0, 2, 3, 6), Array(0, 2, 1, 0, 1, 2), Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0))
    16 
    17 sparseMatrix: org.apache.spark.mllib.linalg.Matrix = 3 x 3 CSCMatrix
    18 
    19 (0,0) 1.0
    20 
    21 (2,0) 2.0
    22 
    23 (1,1) 3.0
    24 
    25 (0,2) 4.0
    26 
    27 (1,2) 5.0
    28 
    29 (2,2) 6.0

  • 相关阅读:
    MySQL主从数据库同步延迟问题解决(转)
    Python2.6升级Python2.7
    Socket网络编程
    Python 面向对象进阶
    Python类基础知识(面向对象基础)
    shell脚本中出现^M
    Centos6下Python3的编译安装
    Python成长之路(常用模块学习)
    SVN使用总结
    xshell锁屏
  • 原文地址:https://www.cnblogs.com/lyy-blog/p/9288701.html
Copyright © 2011-2022 走看看