From 6634ee9b333b18c061367c3e6095dcddb238b3a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E5=B3=A4?= Date: Wed, 29 Apr 2015 10:51:18 +0800 Subject: [PATCH 1/2] SPARK-7149 add a new sparser --- .../scala/org/apache/spark/mllib/linalg/Vectors.scala | 11 +++++++++++ .../org/apache/spark/mllib/linalg/VectorsSuite.scala | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala b/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala index 166c00cff634..67104629d4da 100644 --- a/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala +++ b/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala @@ -210,6 +210,17 @@ object Vectors { */ def dense(values: Array[Double]): Vector = new DenseVector(values) + /** + * Creates a sparse vector providing its value array. + * + * @param values value array, must have the same length as indices. + */ + def sparse(values: Array[Double]): Vector = { + val size = values.length + val (result, indices) = values.zipWithIndex.filter(_._1 != 0.0).unzip + new SparseVector(size, indices.toArray, result.toArray) + } + /** * Creates a sparse vector providing its index array and value array. * diff --git a/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala b/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala index 2839c4c289b2..bc581b510608 100644 --- a/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala +++ b/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala @@ -68,6 +68,11 @@ class VectorsSuite extends FunSuite { assert(vec.toArray === arr) } + test("SPARK-7149 sparse to array") { + val vec = Vectors.sparse(arr).asInstanceOf[SparseVector] + assert(vec.toArray === arr) + } + test("vector equals") { val dv1 = Vectors.dense(arr.clone()) val dv2 = Vectors.dense(arr.clone()) From 423e12aac283e8f1b12c26e99d885e447005bc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E5=B3=A4?= Date: Wed, 29 Apr 2015 10:55:03 +0800 Subject: [PATCH 2/2] SPARK-7194 add a new sparser --- .../test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala b/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala index bc581b510608..8d979e91a286 100644 --- a/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala +++ b/mllib/src/test/scala/org/apache/spark/mllib/linalg/VectorsSuite.scala @@ -68,7 +68,7 @@ class VectorsSuite extends FunSuite { assert(vec.toArray === arr) } - test("SPARK-7149 sparse to array") { + test("SPARK-7194 sparse to array") { val vec = Vectors.sparse(arr).asInstanceOf[SparseVector] assert(vec.toArray === arr) }