本地矩阵是存储在单台机器上的,有 integer 类型的行、列索引,double类型的值。
<br/>
密集矩阵,其输入值按照列 column-major(列优先原则) 顺序存储在单个double 数组中。
稀疏矩阵,是其非零值按照 column-major 顺序以压缩稀疏列(CSC)格式存储。
<br/>
本地矩阵的基类是 Matrix,并且它有两个实现:DenseMatrix和 SparseMatrix。
```scala
sealed trait Matrix extends scala.AnyRef with scala.Serializable {
class DenseMatrix(...) extends scala.AnyRef with org.apache.spark.mllib.linalg.Matrix {
class SparseMatrix(...) extends scala.AnyRef with org.apache.spark.mllib.linalg.Matrix {
```
```scala
import org.apache.spark.mllib.linalg.{Matrices, Matrix}
object LocalMatrix {
def main(args: Array[String]): Unit = {
// 创建密集矩阵((1.0, 2.0), (3.0, 4.0), (5.0, 6.0)),列优先存储
// def dense(numRows : scala.Int, numCols : scala.Int, values : scala.Array[scala.Double])
val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0))
println(dm)
// 1.0 2.0
// 3.0 4.0
// 5.0 6.0
// 创建稀疏矩阵 ((9.0, 0.0), (0.0, 8.0), (0.0, 6.0))
// def sparse(numRows, numCols, colPtrs, rowIndices, values)
// colPtrs: 每列第一个元素在values中的索引+非0元素总数。Array(0, 1, 3), 0,1为列索引,3为values元素总数
// rowIndices: 元素所在的行
val sm: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 1, 2), Array(9, 8, 6))
println(sm)
// 3 x 2 CSCMatrix
// (0,0) 9.0
// (1,1) 8.0
// (2,1) 6.0
val sm2: Matrix = Matrices.sparse(4, 3, Array(0, 1, 2, 4), Array(0, 1, 2, 3), Array(1.0, 2.0, 3.0, 4.0))
println(sm2)
// 4 x 3 CSCMatrix
// (0,0) 1.0
// (1,1) 2.0
// (2,2) 3.0
// (3,2) 4.0
}
}
```