Author: jeastman
Date: Fri Oct 17 11:44:18 2008
New Revision: 705702

URL: http://svn.apache.org/viewvc?rev=705702&view=rev
Log:
Added new vector operation and a new Times binary function per MAHOUT-86. Added 
unit tests thereof

Added:
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/TimesFunction.java
Modified:
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractVector.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/BinaryFunction.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Vector.java
    
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestDenseVector.java
    
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestSparseVector.java
    
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestVectorView.java

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractVector.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractVector.java?rev=705702&r1=705701&r2=705702&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractVector.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractVector.java
 Fri Oct 17 11:44:18 2008
@@ -329,6 +329,16 @@
     return this;
   }
 
+  /* (non-Javadoc)
+   * @see 
org.apache.mahout.matrix.Vector#assign(org.apache.mahout.matrix.BinaryFunction, 
double)
+   */
+  public Vector assign(BinaryFunction f, double y) {
+    for (int i = 0; i < cardinality(); i++) {
+      setQuick(i, f.apply(getQuick(i), y));
+    }
+    return this;
+  }
+
   /*
    * (non-Javadoc)
    * 

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/BinaryFunction.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/BinaryFunction.java?rev=705702&r1=705701&r2=705702&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/BinaryFunction.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/BinaryFunction.java
 Fri Oct 17 11:44:18 2008
@@ -22,6 +22,8 @@
  * 
  */
 public interface BinaryFunction {
+  public final static BinaryFunction plus = new PlusFunction();
+  public final static BinaryFunction times = new TimesFunction();
 
   /**
    * Apply the function to the arguments and return the result

Added: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/TimesFunction.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/TimesFunction.java?rev=705702&view=auto
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/TimesFunction.java
 (added)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/TimesFunction.java
 Fri Oct 17 11:44:18 2008
@@ -0,0 +1,30 @@
+/* Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.mahout.matrix;
+
+public class TimesFunction implements BinaryFunction {
+  /**
+   * Computes the product of two numbers.
+   *
+   * @param x first argument
+   * @param y second argument
+   * @return the product
+   */
+  public double apply(double x, double y) {
+    return x * y;
+  }
+}

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Vector.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Vector.java?rev=705702&r1=705701&r2=705702&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Vector.java 
(original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Vector.java 
Fri Oct 17 11:44:18 2008
@@ -95,6 +95,16 @@
       throws CardinalityException;
 
   /**
+   * Apply the function to each element of the receiver, using the y value as
+   * the second argument of the BinaryFunction
+   * 
+   * @param f a BinaryFunction to be applied
+   * @param y a double value to be argument to the function
+   * @return the modified receiver
+   */
+  Vector assign(BinaryFunction f, double y);
+         
+  /**
    * Return the cardinality of the recipient (the maximum number of values)
    *
    * @return an int

Modified: 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestDenseVector.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestDenseVector.java?rev=705702&r1=705701&r2=705702&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestDenseVector.java
 (original)
+++ 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestDenseVector.java
 Fri Oct 17 11:44:18 2008
@@ -4,7 +4,7 @@
 
 public class TestDenseVector extends TestCase {
 
-  final double[] values = {1.1, 2.2, 3.3};
+  final double[] values = { 1.1, 2.2, 3.3 };
 
   final Vector test = new DenseVector(values);
 
@@ -267,6 +267,18 @@
       assertEquals("value[" + i + "]", 2 * values[i], test.getQuick(i));
   }
 
+  public void testAssignBinaryFunction2() throws Exception {
+    test.assign(new PlusFunction(), 4);
+    for (int i = 0; i < values.length; i++)
+      assertEquals("value[" + i + "]", values[i] + 4, test.getQuick(i));
+  }
+
+  public void testAssignBinaryFunction3() throws Exception {
+    test.assign(new TimesFunction(), 4);
+    for (int i = 0; i < values.length; i++)
+      assertEquals("value[" + i + "]", values[i] * 4, test.getQuick(i));
+  }
+
   public void testAssignBinaryFunctionCardinality() {
     try {
       test.assign(test.like(2), new PlusFunction());
@@ -310,6 +322,6 @@
     for (int row = 0; row < result.cardinality()[0]; row++)
       for (int col = 0; col < result.cardinality()[1]; col++)
         assertEquals("cross[" + row + "][" + col + "]", test.getQuick(row)
-                * test.getQuick(col), result.getQuick(row, col));
+            * test.getQuick(col), result.getQuick(row, col));
   }
 }

Modified: 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestSparseVector.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestSparseVector.java?rev=705702&r1=705701&r2=705702&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestSparseVector.java
 (original)
+++ 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestSparseVector.java
 Fri Oct 17 11:44:18 2008
@@ -1,6 +1,7 @@
 package org.apache.mahout.matrix;
 
 import junit.framework.TestCase;
+
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,7 +21,7 @@
 
 public class TestSparseVector extends TestCase {
 
-  final double[] values = {1.1, 2.2, 3.3};
+  final double[] values = { 1.1, 2.2, 3.3 };
 
   final Vector test = new SparseVector(values.length + 2);
 
@@ -238,7 +239,7 @@
         assertEquals("get [" + i + "]", 0.0, val.get(i));
       else
         assertEquals("get [" + i + "]", values[i - 1] * values[i - 1], val
-                .get(i));
+            .get(i));
   }
 
   public void testTimesVectorCardinality() {
@@ -315,6 +316,24 @@
         assertEquals("value[" + i + "]", 2 * values[i - 1], test.getQuick(i));
   }
 
+  public void testAssignBinaryFunction2() throws Exception {
+    test.assign(new PlusFunction(), 4);
+    for (int i = 0; i < values.length; i++)
+      if (i == 0 || i == 4)
+        assertEquals("get [" + i + "]", 4.0, test.get(i));
+      else
+        assertEquals("value[" + i + "]", values[i - 1] + 4, test.getQuick(i));
+  }
+
+  public void testAssignBinaryFunction3() throws Exception {
+    test.assign(new TimesFunction(), 4);
+    for (int i = 0; i < values.length; i++)
+      if (i == 0 || i == 4)
+        assertEquals("get [" + i + "]", 0.0, test.get(i));
+      else
+        assertEquals("value[" + i + "]", values[i - 1] * 4, test.getQuick(i));
+  }
+
   public void testAssignBinaryFunctionCardinality() {
     try {
       test.assign(test.like(2), new PlusFunction());
@@ -360,6 +379,6 @@
     for (int row = 0; row < result.cardinality()[0]; row++)
       for (int col = 0; col < result.cardinality()[1]; col++)
         assertEquals("cross[" + row + "][" + col + "]", test.getQuick(row)
-                * test.getQuick(col), result.getQuick(row, col));
+            * test.getQuick(col), result.getQuick(row, col));
   }
 }

Modified: 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestVectorView.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestVectorView.java?rev=705702&r1=705701&r2=705702&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestVectorView.java
 (original)
+++ 
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestVectorView.java
 Fri Oct 17 11:44:18 2008
@@ -270,6 +270,18 @@
       assertEquals("value[" + i + "]", 2 * values[i + 1], test.getQuick(i));
   }
 
+  public void testAssignBinaryFunction2() throws Exception {
+    test.assign(new PlusFunction(), 4);
+    for (int i = 0; i < test.cardinality(); i++)
+      assertEquals("value[" + i + "]", values[i + 1] + 4, test.getQuick(i));
+  }
+
+  public void testAssignBinaryFunction3() throws Exception {
+    test.assign(new TimesFunction(), 4);
+    for (int i = 0; i < test.cardinality(); i++)
+      assertEquals("value[" + i + "]", values[i + 1] * 4, test.getQuick(i));
+  }
+
   public void testAssignBinaryFunctionCardinality() {
     try {
       test.assign(test.like(2), new PlusFunction());


Reply via email to