本地向量存儲于單臺機器,其擁有 integer 類型的行,從 0 開始的索引,和 double 類型的值。
<br/>
MLlib 支持兩種類型的本地向量:密集向量(dense)和稀疏向量(sparse)。
密集向量由一個浮點數數組組成,如`(2.1,3.2,4.3)`;而一個稀疏向量由索引和一個浮點向量組成,如`(3,[0, 2],[5.6, 4.3])`代表一個稀疏向量。
<br/>
本地向量的基類是 Vector,并且它有兩個實現:DenseVector 和 SparseVector。
```scala
sealed trait Vector extends scala.AnyRef with scala.Serializable
class DenseVector ... extends scala.AnyRef with org.apache.spark.mllib.linalg.Vector
class SparseVector ... extends scala.AnyRef with org.apache.spark.mllib.linalg.Vector
```
<br/>
```scala
import org.apache.spark.mllib.linalg.{Vector, Vectors, DenseVector, SparseVector}
object LocalVector {
def main(args: Array[String]): Unit = {
// 創建密集向量 (1.0,0.0,3.0)
val dv: Vector = Vectors.dense(1.0, 0.0, 3.0)
println(dv) // [1.0,0.0,3.0]
// 使用數組創建稀疏向量
// def sparse(size : scala.Int, indices : scala.Array[scala.Int], values : scala.Array[scala.Double])
// size: 元素個數
// indices: 元素索引
// values: 元素值
val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))
println(sv1) // (3,[0,2],[1.0,3.0])
// 使用序列創建稀疏向量
val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))
println(sv2) // (3,[0,2],[1.0,3.0])
// 稀疏向量轉密集向量
val dv2: DenseVector = sv1.toDense
println(dv2) // [1.0,0.0,3.0]
// 密集向量轉稀疏向量
val sv3: SparseVector = dv2.toSparse
println(sv3) // (3,[0,2],[1.0,3.0])
}
}
```