MLlib基础数据类型3-矩阵

三、本地矩阵(Local Matrix)

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

 

密集矩阵

package org.onepiece.bigdata.windows.spark_ML

import org.apache.spark.ml.linalg.{Matrices, Matrix, Vectors}
import org.apache.spark.ml.feature._

/*
* 本地矩阵
* 1.密集矩阵 (Dense  Matrix)
* 2.稀疏矩阵 (Sparse Matrix)
* */
object ml_2_LocalMatrix {

  /*
  * 密集矩阵
  * 将所有元素的值存储在一个列优先的双精度数组中
  * */
  def test1_Dense_Matrix(): Unit = {

    //创建一个3行2列的密集矩阵[ [1.0,2.0], [3.0,4.0], [5.0,6.0] ]
    /*
      [1.0, 2.0]
      [3.0, 4.0]
      [5.0, 6.0]
    * */
    val dm = Matrices.dense(
      3,
      2,
      Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0)
    )

    println(dm) //dm.toDense
    /*
1.0  2.0
3.0  4.0
5.0  6.0
    * */

    println(dm.toSparse)
    /*
3 x 2 CSCMatrix
(0,0) 1.0
(1,0) 3.0
(2,0) 5.0
(0,1) 2.0
(1,1) 4.0
(2,1) 6.0
    * */

//创建一个3行2列的密集矩阵 [ [1.0,0.0], [0.0,2.0], [4.0,4.0] ] /* [1.0, 0.0] [0.0, 2.0] [4.0, 4.0] */ val dm2 = Matrices.dense( 3, 2, Array(1.0, 0.0, 4.0) ++ Array(0.0, 2.0, 4.0) ) println(dm2) // dm2.toDense /* 1.0 0.0 0.0 2.0 4.0 4.0 **/ println(dm2.toSparse) /* 3 x 2 CSCMatrix (0,0) 1.0 (2,0) 4.0 (1,1) 2.0 (2,1) 4.0 * */ } }

 

 

稀疏矩阵

package org.onepiece.bigdata.windows.spark_ML

import org.apache.spark.ml.linalg.{Matrices, Matrix, Vectors}
import org.apache.spark.ml.feature._

/*
* 本地矩阵
* 1.密集矩阵 (Dense  Matrix)
* 2.稀疏矩阵 (Sparse Matrix)
* */
object ml_2_LocalMatrix {

  /*
  * 稀疏矩阵
  * 将非0元素以列优先的模式进行存储
  * */
  def test2_Sparse_Matrix(): Unit = {
    //创建一个3行2列的稀疏矩阵[ [9.0,0.0], [0.0,8.0], [0.0,6.0] ]
    /*
       [9.0, 0.0]
       [0.0, 8.0]
       [0.0, 6.0]
    * */
    val sm = Matrices.sparse(
      3,
      2,
      Array(0, 1, 3),
      Array(0, 1, 2),
      Array(9.0, 8.0, 6.0)
    )
    /*
Array(0, 1, 3)
0: 从0开始
1: 第一列有多少个非0值(数目)
3: 从第一列到当前第二列有多少个非0值(数目) 1+2=3

Array(0, 1, 2): 数值的坐标位置(取左边的列)
(0,0) 9.0
(1,1) 8.0
(2,1) 6.0

Array(9.0, 8.0, 6.0): 对应的非0数值
    * */

    println(sm) //sm.toSparse
    /*
3 x 2 CSCMatrix
(0,0) 9.0
(1,1) 8.0
(2,1) 6.0
    * */

    println(sm.toDense)
    /*
9.0  0.0
0.0  8.0
0.0  6.0
    * */

//创建一个3行2列的稀疏矩阵[ [7.0,0.0], [0.0,8.0], [5.0,0.0], [0.0,6.0] ] /* [7.0, 0.0] [0.0, 8.0] [5.0, 0.0] [0.0, 6.0] * */ val sm2 = Matrices.sparse( 4, 2, Array(0, 2, 4), Array(0, 2, 1, 3), Array(7.0, 5.0, 8.0, 6.0) ) /* Array(0, 2, 4) 0: 从0开始 2: 第一列有多少个非0值(数目) 4: 从第一列到当前第二列有多少个非0值(数目) 1+2=3 Array(0, 2, 1, 3): 数值的坐标位置(取左边的列) (0,0) 7.0 (2,0) 5.0 (1,1) 8.0 (3,1) 6.0 Array(7.0, 5.0, 8.0, 6.0): 对应的非0数值 * */ println(sm2) //sm2.toSparse /* (0,0) 7.0 (2,0) 5.0 (1,1) 8.0 (3,1) 6.0 * */ println(sm2.toDense) /* 7.0 0.0 0.0 8.0 5.0 0.0 0.0 6.0 * */ } }

 

posted @ 2020-10-14 23:56  茗::流  阅读(194)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。