You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by ap...@apache.org on 2016/04/22 22:41:15 UTC

mahout git commit: MAHOUT-1833: Enhance svec function to accept cardinality as parameter. closes apache/mahout#224

Repository: mahout
Updated Branches:
  refs/heads/master bedcc3fbe -> add081015


MAHOUT-1833: Enhance svec function to accept cardinality as parameter. closes apache/mahout#224


Project: http://git-wip-us.apache.org/repos/asf/mahout/repo
Commit: http://git-wip-us.apache.org/repos/asf/mahout/commit/add08101
Tree: http://git-wip-us.apache.org/repos/asf/mahout/tree/add08101
Diff: http://git-wip-us.apache.org/repos/asf/mahout/diff/add08101

Branch: refs/heads/master
Commit: add081015e9b7c9c4a3a47f084a21680f7c2be7d
Parents: bedcc3f
Author: yougoer <yo...@yougoer.com>
Authored: Fri Apr 22 16:33:55 2016 -0400
Committer: Andrew Palumbo <ap...@apache.org>
Committed: Fri Apr 22 16:33:55 2016 -0400

----------------------------------------------------------------------
 .../apache/mahout/math/scalabindings/package.scala  | 16 ++++++++++++----
 .../mahout/math/scalabindings/VectorOpsSuite.scala  | 11 +++++++++++
 2 files changed, 23 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mahout/blob/add08101/math-scala/src/main/scala/org/apache/mahout/math/scalabindings/package.scala
----------------------------------------------------------------------
diff --git a/math-scala/src/main/scala/org/apache/mahout/math/scalabindings/package.scala b/math-scala/src/main/scala/org/apache/mahout/math/scalabindings/package.scala
index 6a3aa06..10c534b 100644
--- a/math-scala/src/main/scala/org/apache/mahout/math/scalabindings/package.scala
+++ b/math-scala/src/main/scala/org/apache/mahout/math/scalabindings/package.scala
@@ -198,13 +198,21 @@ package object scalabindings {
 
   /**
    * create a sparse vector out of list of tuple2's
-   * @param sdata
+   * @param sdata cardinality
    * @return
    */
-  def svec(sdata: TraversableOnce[(Int, AnyVal)]) = {
-    val cardinality = if (sdata.nonEmpty) sdata.map(_._1).max + 1 else 0
+  def svec(sdata: TraversableOnce[(Int, AnyVal)], cardinality: Int = -1) = {
+    val required = if (sdata.nonEmpty) sdata.map(_._1).max + 1 else 0
+    var tmp = -1
+    if (cardinality < 0) {
+      tmp = required
+    } else if (cardinality < required) {
+      throw new IllegalArgumentException(s"Required cardinality %required but got %cardinality")
+    } else {
+      tmp = cardinality
+    }
     val initialCapacity = sdata.size
-    val sv = new RandomAccessSparseVector(cardinality, initialCapacity)
+    val sv = new RandomAccessSparseVector(tmp, initialCapacity)
     sdata.foreach(t ⇒ sv.setQuick(t._1, t._2.asInstanceOf[Number].doubleValue()))
     sv
   }

http://git-wip-us.apache.org/repos/asf/mahout/blob/add08101/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
----------------------------------------------------------------------
diff --git a/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala b/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
index d264514..fe272df 100644
--- a/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
+++ b/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
@@ -32,12 +32,23 @@ class VectorOpsSuite extends FunSuite with MahoutSuite {
     val sparseVec = svec((5 -> 1) :: (10 -> 2.0) :: Nil)
     println(sparseVec)
 
+    assert(sparseVec.size() == 11)
+
     val sparseVec2: Vector = (5 -> 1.0) :: (10 -> 2.0) :: Nil
     println(sparseVec2)
 
     val sparseVec3: Vector = new RandomAccessSparseVector(100) := (5 -> 1.0) :: Nil
     println(sparseVec3)
 
+    val sparseVec4 = svec((5 -> 1) :: (10 -> 2.0) :: Nil, 100)
+    println(sparseVec4)
+
+    assert(sparseVec4.size() == 100)
+
+    intercept[IllegalArgumentException] {
+      val sparseVec5 = svec((5 -> 1) :: (10 -> 2.0) :: Nil, 10)  
+    }
+
     val denseVec1: Vector = (1.0, 1.1, 1.2)
     println(denseVec1)