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 <[email protected]> Authored: Fri Apr 22 16:33:55 2016 -0400 Committer: Andrew Palumbo <[email protected]> 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)
