You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by td...@apache.org on 2010/09/08 21:48:25 UTC
svn commit: r995227 - in /mahout/trunk/math/src:
main/java/org/apache/mahout/math/ test/java/org/apache/mahout/math/
Author: tdunning
Date: Wed Sep 8 19:48:24 2010
New Revision: 995227
URL: http://svn.apache.org/viewvc?rev=995227&view=rev
Log:
MAHOUT-497 - Refactor matrix stuff to put cardinality, size(), rowSize() and columnSize() into Abstract matrix. Put rowSize() and columnSize() into Matrix.
Modified:
mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseMatrix.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/Matrix.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/MatrixView.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseColumnMatrix.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseMatrix.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseRowMatrix.java
mahout/trunk/math/src/test/java/org/apache/mahout/math/TestMatrixView.java
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java Wed Sep 8 19:48:24 2010
@@ -17,6 +17,7 @@
package org.apache.mahout.math;
+import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.mahout.math.function.BinaryFunction;
@@ -37,6 +38,20 @@ public abstract class AbstractMatrix imp
protected Map<String, Integer> rowLabelBindings;
+ protected int[] cardinality = new int[2];
+
+ public int columnSize() {
+ return cardinality[COL];
+ }
+
+ public int rowSize() {
+ return cardinality[ROW];
+ }
+
+ public int[] size() {
+ return cardinality;
+ }
+
public Iterator<MatrixSlice> iterator() {
return iterateAll();
}
@@ -363,10 +378,10 @@ public abstract class AbstractMatrix imp
throw new IllegalStateException(cnse); // can't happen
}
if (rowLabelBindings != null) {
- clone.rowLabelBindings = (Map<String, Integer>) ((HashMap<String, Integer>) rowLabelBindings).clone();
+ clone.rowLabelBindings = Maps.newHashMap(rowLabelBindings);
}
if (columnLabelBindings != null) {
- clone.columnLabelBindings = (Map<String, Integer>) ((HashMap<String, Integer>) columnLabelBindings).clone();
+ clone.columnLabelBindings = Maps.newHashMap(columnLabelBindings);
}
return clone;
}
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseMatrix.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseMatrix.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseMatrix.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseMatrix.java Wed Sep 8 19:48:24 2010
@@ -21,20 +21,11 @@ import java.util.Arrays;
/** Matrix of doubles implemented using a 2-d array */
public class DenseMatrix extends AbstractMatrix {
-
protected double[][] values;
-
+
public DenseMatrix() {
}
- protected int columnSize() {
- return values[0].length;
- }
-
- protected int rowSize() {
- return values.length;
- }
-
/**
* Construct a matrix from the given values
*
@@ -48,18 +39,22 @@ public class DenseMatrix extends Abstrac
for (int i = 0; i < values.length; i++) {
this.values[i] = values[i].clone();
}
+ initSize();
}
- /** Construct an empty matrix of the given size */
+ /**
+ * Constructs an empty matrix of the given size.
+ * @param rows The number of rows in the result.
+ * @param columns The number of columns in the result.
+ */
public DenseMatrix(int rows, int columns) {
this.values = new double[rows][columns];
+ initSize();
}
-
- public int[] size() {
- int[] result = new int[2];
- result[ROW] = rowSize();
- result[COL] = columnSize();
- return result;
+
+ private void initSize() {
+ cardinality[ROW] = values.length;
+ cardinality[COL] = values[0].length;
}
@Override
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/Matrix.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/Matrix.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/Matrix.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/Matrix.java Wed Sep 8 19:48:24 2010
@@ -124,6 +124,16 @@ public interface Matrix extends Cloneabl
int[] size();
/**
+ * @return The number of rows in the matrix.
+ */
+ int columnSize();
+
+ /**
+ * @return Returns the number of rows in the matrix.
+ */
+ int rowSize();
+
+ /**
* Return a copy of the recipient
*
* @return a new Matrix
@@ -190,7 +200,7 @@ public interface Matrix extends Cloneabl
Matrix like();
/**
- * Return an empty matrix of the same underlying class as the receiver and of the given cardinality
+ * Returns an empty matrix of the same underlying class as the receiver and of the specified size.
*
* @param rows the int number of rows
* @param columns the int number of columns
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/MatrixView.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/MatrixView.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/MatrixView.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/MatrixView.java Wed Sep 8 19:48:24 2010
@@ -25,10 +25,7 @@ public class MatrixView extends Abstract
// the offset into the Matrix
private int[] offset;
- // the cardinality of the view
- private int[] cardinality;
-
- public MatrixView() {
+ private MatrixView() {
}
/**
@@ -41,11 +38,7 @@ public class MatrixView extends Abstract
public MatrixView(Matrix matrix, int[] offset, int[] cardinality) {
this.matrix = matrix;
this.offset = offset;
- this.cardinality = cardinality;
- }
-
- public int[] size() {
- return cardinality;
+ this.cardinality = Arrays.copyOf(cardinality, 2);
}
@Override
@@ -62,11 +55,10 @@ public class MatrixView extends Abstract
}
public Matrix like() {
- return matrix.like(cardinality[ROW], cardinality[COL]);
+ return matrix.like(rowSize(), columnSize());
}
public Matrix like(int rows, int columns) {
-
return matrix.like(rows, columns);
}
@@ -82,14 +74,14 @@ public class MatrixView extends Abstract
if (offset[ROW] < ROW) {
throw new IndexException(offset[ROW], ROW);
}
- if (offset[ROW] + size[ROW] > cardinality[ROW]) {
- throw new IndexException(offset[ROW] + size[ROW], cardinality[ROW]);
+ if (offset[ROW] + size[ROW] > rowSize()) {
+ throw new IndexException(offset[ROW] + size[ROW], rowSize());
}
if (offset[COL] < ROW) {
throw new IndexException(offset[COL], ROW);
}
- if (offset[COL] + size[COL] > cardinality[COL]) {
- throw new IndexException(offset[COL] + size[COL], cardinality[COL]);
+ if (offset[COL] + size[COL] > columnSize()) {
+ throw new IndexException(offset[COL] + size[COL], columnSize());
}
int[] origin = offset.clone();
origin[ROW] += offset[ROW];
@@ -98,10 +90,10 @@ public class MatrixView extends Abstract
}
public Matrix assignColumn(int column, Vector other) {
- if (cardinality[ROW] != other.size()) {
- throw new CardinalityException(cardinality[ROW], other.size());
+ if (rowSize() != other.size()) {
+ throw new CardinalityException(rowSize(), other.size());
}
- for (int row = 0; row < cardinality[ROW]; row++) {
+ for (int row = 0; row < rowSize(); row++) {
matrix.setQuick(row + offset[ROW], column + offset[COL], other
.getQuick(row));
}
@@ -109,10 +101,10 @@ public class MatrixView extends Abstract
}
public Matrix assignRow(int row, Vector other) {
- if (cardinality[COL] != other.size()) {
- throw new CardinalityException(cardinality[COL], other.size());
+ if (columnSize() != other.size()) {
+ throw new CardinalityException(columnSize(), other.size());
}
- for (int col = 0; col < cardinality[COL]; col++) {
+ for (int col = 0; col < columnSize(); col++) {
matrix
.setQuick(row + offset[ROW], col + offset[COL], other.getQuick(col));
}
@@ -120,19 +112,18 @@ public class MatrixView extends Abstract
}
public Vector getColumn(int column) {
- if (column < 0 || column >= cardinality[COL]) {
- throw new IndexException(column, cardinality[COL]);
+ if (column < 0 || column >= columnSize()) {
+ throw new IndexException(column, columnSize());
}
- return new VectorView(matrix.getColumn(column + offset[COL]), offset[ROW],
- cardinality[ROW]);
+ return new VectorView(matrix.getColumn(column + offset[COL]), offset[ROW], rowSize());
}
public Vector getRow(int row) {
- if (row < 0 || row >= cardinality[ROW]) {
- throw new IndexException(row, cardinality[ROW]);
+ if (row < 0 || row >= rowSize()) {
+ throw new IndexException(row, rowSize());
}
return new VectorView(matrix.getRow(row + offset[ROW]), offset[COL],
- cardinality[COL]);
+ columnSize());
}
}
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseColumnMatrix.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseColumnMatrix.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseColumnMatrix.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseColumnMatrix.java Wed Sep 8 19:48:24 2010
@@ -22,9 +22,6 @@ package org.apache.mahout.math;
* SparseVectors.
*/
public class SparseColumnMatrix extends AbstractMatrix {
-
- private int[] cardinality;
-
private Vector[] columns;
public SparseColumnMatrix() {
@@ -57,10 +54,6 @@ public class SparseColumnMatrix extends
}
}
- public int[] size() {
- return cardinality;
- }
-
@Override
public Matrix clone() {
SparseColumnMatrix clone = (SparseColumnMatrix) super.clone();
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseMatrix.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseMatrix.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseMatrix.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseMatrix.java Wed Sep 8 19:48:24 2010
@@ -23,9 +23,6 @@ import org.apache.mahout.math.map.OpenIn
/** Doubly sparse matrix. Implemented as a Map of RandomAccessSparseVector rows */
public class SparseMatrix extends AbstractMatrix {
-
- private int[] cardinality;
-
private OpenIntObjectHashMap<Vector> rows;
public SparseMatrix() {
@@ -59,10 +56,6 @@ public class SparseMatrix extends Abstra
this.rows = new OpenIntObjectHashMap<Vector>();
}
- public int[] size() {
- return cardinality;
- }
-
@Override
public Matrix clone() {
SparseMatrix clone = (SparseMatrix) super.clone();
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseRowMatrix.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseRowMatrix.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseRowMatrix.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/SparseRowMatrix.java Wed Sep 8 19:48:24 2010
@@ -22,9 +22,6 @@ package org.apache.mahout.math;
* either SequentialAccessSparseVectors or RandomAccessSparseVectors.
*/
public class SparseRowMatrix extends AbstractMatrix {
-
- private int[] cardinality;
-
private Vector[] rows;
private boolean randomAccessRows;
@@ -73,10 +70,6 @@ public class SparseRowMatrix extends Abs
this(cardinality, true);
}
- public int[] size() {
- return cardinality;
- }
-
@Override
public Matrix clone() {
SparseRowMatrix clone = (SparseRowMatrix) super.clone();
Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/TestMatrixView.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/TestMatrixView.java?rev=995227&r1=995226&r2=995227&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/TestMatrixView.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/TestMatrixView.java Wed Sep 8 19:48:24 2010
@@ -437,6 +437,10 @@ public final class TestMatrixView extend
public void testGetColumn() {
Vector column = test.getColumn(1);
assertEquals("row size", 3, column.getNumNondefaultElements());
+ int i = 0;
+ for (double x : new double[]{3.3, 5.5, 7.7}) {
+ assertEquals(x, column.get(i++), 0);
+ }
}
@Test(expected = IndexException.class)