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());