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 * */ } }

浙公网安备 33010602011771号