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)