You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2009/06/19 06:50:41 UTC

svn commit: r786370 [1/2] - in /lucene/mahout/trunk: core/src/main/java/org/apache/mahout/clustering/canopy/ core/src/main/java/org/apache/mahout/clustering/dirichlet/ core/src/main/java/org/apache/mahout/clustering/dirichlet/models/ core/src/main/java...

Author: srowen
Date: Fri Jun 19 04:50:40 2009
New Revision: 786370

URL: http://svn.apache.org/viewvc?rev=786370&view=rev
Log:
MAHOUT-121

Added:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/OrderedIntDoubleMapping.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestOrderedIntDoubleMapping.java
Modified:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/canopy/Canopy.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/AsymmetricSampledNormalModel.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/NormalModel.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/SampledNormalModel.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/fuzzykmeans/SoftCluster.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/kmeans/Cluster.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/meanshift/MeanShiftCanopy.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractMatrix.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractVector.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseMatrix.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseVector.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Matrix.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/MatrixView.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseColumnMatrix.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseMatrix.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseRowMatrix.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseVector.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Vector.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/VectorView.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/CosineDistanceMeasure.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/EuclideanDistanceMeasure.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/ManhattanDistanceMeasure.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/TanimotoDistanceMeasure.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedEuclideanDistanceMeasure.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedManhattanDistanceMeasure.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/canopy/TestCanopyCreation.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/dirichlet/TestMapReduce.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/MatrixTest.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/TestMatrixView.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
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/TestVectorWritable.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/VectorTest.java
    lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/clustering/dirichlet/DisplayDirichlet.java
    lucene/mahout/trunk/examples/src/main/java/org/apache/mahout/clustering/syntheticcontrol/dirichlet/NormalScModel.java
    lucene/mahout/trunk/utils/src/test/java/org/apache/mahout/utils/vectors/lucene/LuceneIterableTest.java

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/canopy/Canopy.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/canopy/Canopy.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/canopy/Canopy.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/canopy/Canopy.java Fri Jun 19 04:50:40 2009
@@ -78,7 +78,7 @@
   public Canopy(Vector point) {
     this.canopyId = nextCanopyId++;
     this.center = point;
-    this.pointTotal = point.copy();
+    this.pointTotal = point.clone();
     this.numPoints = 1;
   }
 
@@ -93,7 +93,7 @@
   public Canopy(Vector point, int canopyId) {
     this.canopyId = canopyId;
     this.center = point;
-    this.pointTotal = point.copy();
+    this.pointTotal = point.clone();
     this.numPoints = 1;
   }
 
@@ -263,7 +263,7 @@
    */
   public void addPoint(Vector point) {
     numPoints++;
-    for (int i = 0; i < point.cardinality(); i++)
+    for (int i = 0; i < point.size(); i++)
       pointTotal.set(i, point.get(i) + pointTotal.get(i));
   }
 
@@ -317,8 +317,8 @@
    * @return a point which is the new centroid
    */
   public Vector computeCentroid() {
-    Vector result = new SparseVector(pointTotal.cardinality());
-    for (int i = 0; i < pointTotal.cardinality(); i++)
+    Vector result = new SparseVector(pointTotal.size());
+    for (int i = 0; i < pointTotal.size(); i++)
       result.set(i, pointTotal.get(i) / numPoints);
     return result;
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java Fri Jun 19 04:50:40 2009
@@ -175,7 +175,7 @@
     double total = probabilities.zSum();
     double nextDouble = random.nextDouble();
     double p = nextDouble * total;
-    for (int i = 0; i < probabilities.cardinality(); i++) {
+    for (int i = 0; i < probabilities.size(); i++) {
       double p_i = probabilities.get(i);
       if (p < p_i) {
         return i;
@@ -207,7 +207,7 @@
   public static Vector rMultinom(int size, Vector probabilities) {
     // our probability argument may not be normalized.
     double total = probabilities.zSum();
-    int cardinality = probabilities.cardinality();
+    int cardinality = probabilities.size();
     Vector result = new DenseVector(cardinality);
     for (int i = 0; total > 0 && i < cardinality; i++) {
       double p = probabilities.get(i);
@@ -253,7 +253,7 @@
     Vector r = alpha.like();
     double total = alpha.zSum();
     double remainder = 1;
-    for (int i = 0; i < r.cardinality(); i++) {
+    for (int i = 0; i < r.size(); i++) {
       double a = alpha.get(i);
       total -= a;
       double beta = rBeta(a, Math.max(0, total));

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/AsymmetricSampledNormalModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/AsymmetricSampledNormalModel.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/AsymmetricSampledNormalModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/AsymmetricSampledNormalModel.java Fri Jun 19 04:50:40 2009
@@ -91,7 +91,7 @@
   * @return
   */
   private double pdf(Vector x, double sd) {
-    assert x.size() == 2;
+    assert x.getNumNondefaultElements() == 2;
     double sd2 = sd * sd;
     double exp = -(x.dot(x) - 2 * x.dot(mean) + mean.dot(mean)) / (2 * sd2);
     double ex = Math.exp(exp);
@@ -101,7 +101,7 @@
   @Override
   public double pdf(Vector x) {
     // return the product of the two component pdfs
-    assert x.size() == 2;
+    assert x.getNumNondefaultElements() == 2;
     double pdf0 = pdf(x, sd.get(0));
     double pdf1 = pdf(x, sd.get(1));
     //if (pdf0 < 0 || pdf0 > 1 || pdf1 < 0 || pdf1 > 1)
@@ -119,11 +119,11 @@
     StringBuilder buf = new StringBuilder();
     buf.append("asnm{n=").append(s0).append(" m=[");
     if (mean != null)
-      for (int i = 0; i < mean.cardinality(); i++)
+      for (int i = 0; i < mean.size(); i++)
         buf.append(String.format("%.2f", mean.get(i))).append(", ");
     buf.append("] sd=[");
     if (sd != null)
-      for (int i = 0; i < sd.cardinality(); i++)
+      for (int i = 0; i < sd.size(); i++)
         buf.append(String.format("%.2f", sd.get(i))).append(", ");
     buf.append("]}");
     return buf.toString();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/NormalModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/NormalModel.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/NormalModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/NormalModel.java Fri Jun 19 04:50:40 2009
@@ -76,14 +76,14 @@
     if (s0 > 1) {
       Vector std = s2.times(s0).minus(s1.times(s1)).assign(
           new SquareRootFunction()).divide(s0);
-      sd = std.zSum() / s1.cardinality();
+      sd = std.zSum() / s1.size();
     } else
       sd = Double.MIN_VALUE;
   }
 
   @Override
   public double pdf(Vector x) {
-    assert x.size() == 2;
+    assert x.getNumNondefaultElements() == 2;
     double sd2 = sd * sd;
     double exp = -(x.dot(x) - 2 * x.dot(mean) + mean.dot(mean)) / (2 * sd2);
     double ex = Math.exp(exp);
@@ -100,7 +100,7 @@
     StringBuilder buf = new StringBuilder();
     buf.append("nm{n=").append(s0).append(" m=[");
     if (mean != null)
-      for (int i = 0; i < mean.cardinality(); i++)
+      for (int i = 0; i < mean.size(); i++)
         buf.append(String.format("%.2f", mean.get(i))).append(", ");
     buf.append("] sd=").append(String.format("%.2f", sd)).append('}');
     return buf.toString();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/SampledNormalModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/SampledNormalModel.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/SampledNormalModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/models/SampledNormalModel.java Fri Jun 19 04:50:40 2009
@@ -33,7 +33,7 @@
     StringBuilder buf = new StringBuilder();
     buf.append("snm{n=").append(s0).append(" m=[");
     if (mean != null)
-      for (int i = 0; i < mean.cardinality(); i++)
+      for (int i = 0; i < mean.size(); i++)
         buf.append(String.format("%.2f", mean.get(i))).append(", ");
     buf.append("] sd=").append(String.format("%.2f", sd)).append('}');
     return buf.toString();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/fuzzykmeans/SoftCluster.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/fuzzykmeans/SoftCluster.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/fuzzykmeans/SoftCluster.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/fuzzykmeans/SoftCluster.java Fri Jun 19 04:50:40 2009
@@ -311,7 +311,7 @@
     s0 += ptProb;
     Vector wtPt = point.times(ptProb);
     if (s1 == null)
-      s1 = point.copy();
+      s1 = point.clone();
     else
       s1 = s1.plus(wtPt);
     if (s2 == null)
@@ -329,7 +329,7 @@
       Vector radical = s2.times(s0).minus(s1.times(s1));
       radical = radical.times(radical).assign(new SquareRootFunction());
       Vector stds = radical.assign(new SquareRootFunction()).divide(s0);
-      return stds.zSum() / stds.cardinality();
+      return stds.zSum() / stds.size();
     } else
       return 0;
   }
@@ -345,7 +345,7 @@
     centroid = null;
     pointProbSum += ptProb;
     if (weightedPointTotal == null)
-      weightedPointTotal = point.copy().times(ptProb);
+      weightedPointTotal = point.clone().times(ptProb);
     else
       weightedPointTotal = weightedPointTotal.plus(point.times(ptProb));
   }
@@ -359,7 +359,7 @@
     centroid = null;
     pointProbSum += partialSumPtProb;
     if (weightedPointTotal == null)
-      weightedPointTotal = delta.copy();
+      weightedPointTotal = delta.clone();
     else
       weightedPointTotal = weightedPointTotal.plus(delta);
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/kmeans/Cluster.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/kmeans/Cluster.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/kmeans/Cluster.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/kmeans/Cluster.java Fri Jun 19 04:50:40 2009
@@ -270,7 +270,7 @@
     centroid = null;
     numPoints += count;
     if (pointTotal == null) {
-      pointTotal = delta.copy();
+      pointTotal = delta.clone();
       pointSquaredTotal = delta.times(delta);
     } else {
       pointTotal = pointTotal.plus(delta);

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/meanshift/MeanShiftCanopy.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/meanshift/MeanShiftCanopy.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/meanshift/MeanShiftCanopy.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/meanshift/MeanShiftCanopy.java Fri Jun 19 04:50:40 2009
@@ -242,7 +242,7 @@
   public MeanShiftCanopy(Vector point) {
     this.canopyId = nextCanopyId++;
     this.center = point;
-    this.pointTotal = point.copy();
+    this.pointTotal = point.clone();
     this.numPoints = 1;
     this.boundPoints.add(point);
   }
@@ -259,7 +259,7 @@
       boolean converged) {
     this.canopyId = canopyId;
     this.center = point;
-    this.pointTotal = point.copy();
+    this.pointTotal = point.clone();
     this.numPoints = 1;
     this.boundPoints = boundPoints;
     this.converged = converged;
@@ -274,7 +274,7 @@
    */
   void addPoints(Vector point, int nPoints) {
     numPoints += nPoints;
-    Vector subTotal = (nPoints == 1) ? point.copy() : point.times(nPoints);
+    Vector subTotal = (nPoints == 1) ? point.clone() : point.times(nPoints);
     pointTotal = (pointTotal == null) ? subTotal : pointTotal.plus(subTotal);
   }
 
@@ -294,7 +294,7 @@
    * @return a Vector which is the new bound centroid
    */
   public Vector computeBoundCentroid() {
-    Vector result = new DenseVector(center.cardinality());
+    Vector result = new DenseVector(center.size());
     for (Vector v : boundPoints)
       result.assign(v, new PlusFunction());
     return result.divide(boundPoints.size());
@@ -416,7 +416,7 @@
     converged = new EuclideanDistanceMeasure().distance(centroid, center) < convergenceDelta;
     center = centroid;
     numPoints = 1;
-    pointTotal = centroid.copy();
+    pointTotal = centroid.clone();
     return converged;
   }
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractMatrix.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/AbstractMatrix.java Fri Jun 19 04:50:40 2009
@@ -143,7 +143,7 @@
 
   @Override
   public Matrix assign(double value) {
-    int[] c = cardinality();
+    int[] c = size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         setQuick(row, col, value);
@@ -152,7 +152,7 @@
 
   @Override
   public Matrix assign(double[][] values) {
-    int[] c = cardinality();
+    int[] c = size();
     if (c[ROW] != values.length)
       throw new CardinalityException();
     for (int row = 0; row < c[ROW]; row++)
@@ -166,8 +166,8 @@
 
   @Override
   public Matrix assign(Matrix other, BinaryFunction function) {
-    int[] c = cardinality();
-    int[] o = other.cardinality();
+    int[] c = size();
+    int[] o = other.size();
     if (c[ROW] != o[ROW] || c[COL] != o[COL])
       throw new CardinalityException();
     for (int row = 0; row < c[ROW]; row++)
@@ -179,8 +179,8 @@
 
   @Override
   public Matrix assign(Matrix other) {
-    int[] c = cardinality();
-    int[] o = other.cardinality();
+    int[] c = size();
+    int[] o = other.size();
     if (c[ROW] != o[ROW] || c[COL] != o[COL])
       throw new CardinalityException();
     for (int row = 0; row < c[ROW]; row++)
@@ -191,7 +191,7 @@
 
   @Override
   public Matrix assign(UnaryFunction function) {
-    int[] c = cardinality();
+    int[] c = size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         setQuick(row, col, function.apply(getQuick(row, col)));
@@ -200,7 +200,7 @@
 
   @Override
   public double determinant() {
-    int[] card = cardinality();
+    int[] card = size();
     int rowSize = card[ROW];
     int columnSize = card[COL];
     if (rowSize != columnSize)
@@ -234,10 +234,12 @@
 
   }
 
+  public abstract Matrix clone();
+
   @Override
   public Matrix divide(double x) {
-    Matrix result = copy();
-    int[] c = cardinality();
+    Matrix result = clone();
+    int[] c = size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         result.setQuick(row, col, result.getQuick(row, col) / x);
@@ -246,7 +248,7 @@
 
   @Override
   public double get(int row, int column) {
-    int[] c = cardinality();
+    int[] c = size();
     if (row < 0 || column < 0 || row >= c[ROW] || column >= c[COL])
       throw new IndexException();
     return getQuick(row, column);
@@ -254,11 +256,11 @@
 
   @Override
   public Matrix minus(Matrix other) {
-    int[] c = cardinality();
-    int[] o = other.cardinality();
+    int[] c = size();
+    int[] o = other.size();
     if (c[ROW] != o[ROW] || c[COL] != o[COL])
       throw new CardinalityException();
-    Matrix result = copy();
+    Matrix result = clone();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         result.setQuick(row, col, result.getQuick(row, col)
@@ -268,8 +270,8 @@
 
   @Override
   public Matrix plus(double x) {
-    Matrix result = copy();
-    int[] c = cardinality();
+    Matrix result = clone();
+    int[] c = size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         result.setQuick(row, col, result.getQuick(row, col) + x);
@@ -278,11 +280,11 @@
 
   @Override
   public Matrix plus(Matrix other) {
-    int[] c = cardinality();
-    int[] o = other.cardinality();
+    int[] c = size();
+    int[] o = other.size();
     if (c[ROW] != o[ROW] || c[COL] != o[COL])
       throw new CardinalityException();
-    Matrix result = copy();
+    Matrix result = clone();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         result.setQuick(row, col, result.getQuick(row, col)
@@ -292,7 +294,7 @@
 
   @Override
   public void set(int row, int column, double value) {
-    int[] c = cardinality();
+    int[] c = size();
     if (row < 0 || column < 0 || row >= c[ROW] || column >= c[COL])
       throw new IndexException();
     setQuick(row, column, value);
@@ -300,7 +302,7 @@
 
   @Override
   public void set(int row, double[] data) {
-    int[] c = cardinality();
+    int[] c = size();
     if (c[COL] < data.length)
       throw new CardinalityException();
     if ((c[ROW] < row) || (row < 0))
@@ -312,8 +314,8 @@
 
   @Override
   public Matrix times(double x) {
-    Matrix result = copy();
-    int[] c = cardinality();
+    Matrix result = clone();
+    int[] c = size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         result.setQuick(row, col, result.getQuick(row, col) * x);
@@ -322,8 +324,8 @@
 
   @Override
   public Matrix times(Matrix other) {
-    int[] c = cardinality();
-    int[] o = other.cardinality();
+    int[] c = size();
+    int[] o = other.size();
     if (c[COL] != o[ROW])
       throw new CardinalityException();
     Matrix result = like(c[ROW], o[COL]);
@@ -339,7 +341,7 @@
 
   @Override
   public Matrix transpose() {
-    int[] card = cardinality();
+    int[] card = size();
     Matrix result = like(card[COL], card[ROW]);
     for (int row = 0; row < card[ROW]; row++)
       for (int col = 0; col < card[COL]; col++)
@@ -350,7 +352,7 @@
   @Override
   public double zSum() {
     double result = 0;
-    int[] c = cardinality();
+    int[] c = size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         result += getQuick(row, col);

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=786370&r1=786369&r2=786370&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 Jun 19 04:50:40 2009
@@ -95,27 +95,29 @@
     }
   }
 
+  public abstract Vector clone();
+
   @Override
   public Vector divide(double x) {
-    Vector result = copy();
-    for (int i = 0; i < result.cardinality(); i++)
+    Vector result = clone();
+    for (int i = 0; i < result.size(); i++)
       result.setQuick(i, getQuick(i) / x);
     return result;
   }
 
   @Override
   public double dot(Vector x) {
-    if (cardinality() != x.cardinality())
+    if (size() != x.size())
       throw new CardinalityException();
     double result = 0;
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       result += getQuick(i) * x.getQuick(i);
     return result;
   }
 
   @Override
   public double get(int index) {
-    if (index >= 0 && index < cardinality())
+    if (index >= 0 && index < size())
       return getQuick(index);
     else
       throw new IndexException();
@@ -123,10 +125,10 @@
 
   @Override
   public Vector minus(Vector x) {
-    if (cardinality() != x.cardinality())
+    if (size() != x.size())
       throw new CardinalityException();
-    Vector result = copy();
-    for (int i = 0; i < result.cardinality(); i++)
+    Vector result = clone();
+    for (int i = 0; i < result.size(); i++)
       result.setQuick(i, getQuick(i) - x.getQuick(i));
     return result;
   }
@@ -152,13 +154,13 @@
     } else if (power == 0.0) {
       // this is the number of non-zero elements
       double val = 0.0;
-      for (int i = 0; i < cardinality(); i++) {
+      for (int i = 0; i < size(); i++) {
         val += getQuick(i) == 0 ? 0 : 1;
       }
       return divide(val);
     } else {
       double val = 0.0;
-      for (int i = 0; i < cardinality(); i++) {
+      for (int i = 0; i < size(); i++) {
         val += Math.pow(getQuick(i), power);
       }
       double divFactor = Math.pow(val, 1.0 / power);
@@ -169,7 +171,7 @@
   @Override
   public double maxValue() {
     double result = Double.MIN_VALUE;
-    for (int i = 0; i < cardinality(); i++) {
+    for (int i = 0; i < size(); i++) {
       result = Math.max(result, getQuick(i));
     }
     return result;
@@ -179,7 +181,7 @@
   public int maxValueIndex() {
     int result = -1;
     double max = Double.MIN_VALUE;
-    for (int i = 0; i < cardinality(); i++) {
+    for (int i = 0; i < size(); i++) {
       double tmp = getQuick(i);
       if (tmp > max) {
         max = tmp;
@@ -191,25 +193,25 @@
 
   @Override
   public Vector plus(double x) {
-    Vector result = copy();
-    for (int i = 0; i < result.cardinality(); i++)
+    Vector result = clone();
+    for (int i = 0; i < result.size(); i++)
       result.setQuick(i, getQuick(i) + x);
     return result;
   }
 
   @Override
   public Vector plus(Vector x) {
-    if (cardinality() != x.cardinality())
+    if (size() != x.size())
       throw new CardinalityException();
-    Vector result = copy();
-    for (int i = 0; i < result.cardinality(); i++)
+    Vector result = clone();
+    for (int i = 0; i < result.size(); i++)
       result.setQuick(i, getQuick(i) + x.getQuick(i));
     return result;
   }
 
   @Override
   public void set(int index, double value) {
-    if (index >= 0 && index < cardinality())
+    if (index >= 0 && index < size())
       setQuick(index, value);
     else
       throw new IndexException();
@@ -217,18 +219,18 @@
 
   @Override
   public Vector times(double x) {
-    Vector result = copy();
-    for (int i = 0; i < result.cardinality(); i++)
+    Vector result = clone();
+    for (int i = 0; i < result.size(); i++)
       result.setQuick(i, getQuick(i) * x);
     return result;
   }
 
   @Override
   public Vector times(Vector x) {
-    if (cardinality() != x.cardinality())
+    if (size() != x.size())
       throw new CardinalityException();
-    Vector result = copy();
-    for (int i = 0; i < result.cardinality(); i++)
+    Vector result = clone();
+    for (int i = 0; i < result.size(); i++)
       result.setQuick(i, getQuick(i) * x.getQuick(i));
     return result;
   }
@@ -236,39 +238,39 @@
   @Override
   public double zSum() {
     double result = 0;
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       result += getQuick(i);
     return result;
   }
 
   @Override
   public Vector assign(double value) {
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       setQuick(i, value);
     return this;
   }
 
   @Override
   public Vector assign(double[] values) {
-    if (values.length != cardinality())
+    if (values.length != size())
       throw new CardinalityException();
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       setQuick(i, values[i]);
     return this;
   }
 
   @Override
   public Vector assign(Vector other) {
-    if (other.cardinality() != cardinality())
+    if (other.size() != size())
       throw new CardinalityException();
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       setQuick(i, other.getQuick(i));
     return this;
   }
 
   @Override
   public Vector assign(BinaryFunction f, double y) {
-    for (int i = 0; i < cardinality(); i++) {
+    for (int i = 0; i < size(); i++) {
       setQuick(i, f.apply(getQuick(i), y));
     }
     return this;
@@ -276,24 +278,24 @@
 
   @Override
   public Vector assign(UnaryFunction function) {
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       setQuick(i, function.apply(getQuick(i)));
     return this;
   }
 
   @Override
   public Vector assign(Vector other, BinaryFunction function) {
-    if (other.cardinality() != cardinality())
+    if (other.size() != size())
       throw new CardinalityException();
-    for (int i = 0; i < cardinality(); i++)
+    for (int i = 0; i < size(); i++)
       setQuick(i, function.apply(getQuick(i), other.getQuick(i)));
     return this;
   }
 
   @Override
   public Matrix cross(Vector other) {
-    Matrix result = matrixLike(cardinality(), other.cardinality());
-    for (int row = 0; row < cardinality(); row++)
+    Matrix result = matrixLike(size(), other.size());
+    for (int row = 0; row < size(); row++)
       result.assignRow(row, other.times(getQuick(row)));
     return result;
   }
@@ -365,8 +367,8 @@
   public static boolean equivalent(Vector left, Vector right) {
     if (left == right) return true;
     boolean result = true;
-    int leftCardinality = left.cardinality();
-    if (leftCardinality == right.cardinality()) {
+    int leftCardinality = left.size();
+    if (leftCardinality == right.size()) {
       for (int i = 0; i < leftCardinality; i++) {
         if (left.getQuick(i) != right.getQuick(i)) {
           return false;
@@ -402,8 +404,8 @@
     }
     
     boolean result = true;
-    int leftCardinality = left.cardinality();
-    if (leftCardinality == right.cardinality()) {
+    int leftCardinality = left.size();
+    if (leftCardinality == right.size()) {
       for (int i = 0; i < leftCardinality; i++) {
         if (left.getQuick(i) != right.getQuick(i)) {
           return false;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseMatrix.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseMatrix.java Fri Jun 19 04:50:40 2009
@@ -69,7 +69,7 @@
   }
 
   @Override
-  public int[] cardinality() {
+  public int[] size() {
     int[] result = new int[2];
     result[ROW] = rowSize();
     result[COL] = columnSize();
@@ -77,7 +77,7 @@
   }
 
   @Override
-  public Matrix copy() {
+  public Matrix clone() {
     return new DenseMatrix(values);
   }
 
@@ -110,8 +110,8 @@
   }
 
   @Override
-  public int[] size() {
-    return cardinality();
+  public int[] getNumNondefaultElements() {
+    return size();
   }
 
   @Override
@@ -132,7 +132,7 @@
 
   @Override
   public Matrix assignColumn(int column, Vector other) {
-    if (other.cardinality() != rowSize() || column >= columnSize())
+    if (other.size() != rowSize() || column >= columnSize())
       throw new CardinalityException();
     for (int row = 0; row < rowSize(); row++)
       values[row][column] = other.getQuick(row);
@@ -141,9 +141,10 @@
 
   @Override
   public Matrix assignRow(int row, Vector other) {
-    if (row >= rowSize() || other.cardinality() != columnSize())
+    if (row >= rowSize() || other.size() != columnSize())
       throw new CardinalityException();
-    values[row] = other.toArray();
+    for (int col = 0; col < columnSize(); col++)
+      values[row][col] = other.getQuick(col);
     return this;
   }
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseVector.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseVector.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseVector.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/DenseVector.java Fri Jun 19 04:50:40 2009
@@ -80,12 +80,12 @@
   }
 
   @Override
-  public int cardinality() {
+  public int size() {
     return values.length;
   }
 
   @Override
-  public DenseVector copy() {
+  public DenseVector clone() {
     DenseVector denseVector = new DenseVector(values);
     denseVector.setLabelBindings(getLabelBindings());
     return denseVector;
@@ -98,7 +98,7 @@
 
   @Override
   public DenseVector like() {
-    DenseVector denseVector = new DenseVector(cardinality());
+    DenseVector denseVector = new DenseVector(size());
     denseVector.setLabelBindings(getLabelBindings());
     return denseVector;
   }
@@ -116,16 +116,11 @@
   }
 
   @Override
-  public int size() {
+  public int getNumNondefaultElements() {
     return values.length;
   }
 
   @Override
-  public double[] toArray() {
-    return values.clone();
-  }
-
-  @Override
   public Vector viewPart(int offset, int length) {
     if (length > values.length)
       throw new CardinalityException();
@@ -182,7 +177,7 @@
 
   @Override
   public void write(DataOutput dataOutput) throws IOException {
-    dataOutput.writeInt(cardinality());
+    dataOutput.writeInt(size());
     for (Vector.Element element : this) {
       dataOutput.writeDouble(element.get());
     }
@@ -206,13 +201,14 @@
    * @see AbstractVector#strictEquivalence(Vector, Vector)
    * @see AbstractVector#equivalent(Vector, Vector)
    */
+  @Override
   public boolean equals(Object o) {
     if (this == o) return true;
     if (!(o instanceof Vector)) return false;
 
     Vector that = (Vector) o;
     String thatName = that.getName();
-    if (this.cardinality() != that.cardinality()) return false;
+    if (this.size() != that.size()) return false;
     if (name != null && thatName != null && !name.equals(thatName)){
       return false;
     } else if ((name != null && thatName == null) || (thatName != null && name == null)){

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Matrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Matrix.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Matrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/Matrix.java Fri Jun 19 04:50:40 2009
@@ -24,7 +24,7 @@
 /**
  * The basic interface including numerous convenience functions
  */
-public interface Matrix {
+public interface Matrix extends Cloneable {
 
   /**
    * Return a formatted WritableComparable<?> suitable for output
@@ -109,14 +109,14 @@
    * 
    * @return an int[2]
    */
-  int[] cardinality();
+  int[] size();
 
   /**
    * Return a copy of the recipient
    * 
    * @return a new Matrix
    */
-  Matrix copy();
+  Matrix clone();
 
     /**
      * Returns matrix determinator using Laplace theorem
@@ -250,7 +250,7 @@
    * 
    * @return an int[2] containing [row, column] count
    */
-  int[] size();
+  int[] getNumNondefaultElements();
 
   /**
    * Return a new matrix containing the product of each value of the recipient

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/MatrixView.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/MatrixView.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/MatrixView.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/MatrixView.java Fri Jun 19 04:50:40 2009
@@ -60,13 +60,13 @@
   }
 
   @Override
-  public int[] cardinality() {
+  public int[] size() {
     return cardinality;
   }
 
   @Override
-  public Matrix copy() {
-    return new MatrixView(matrix.copy(), offset, cardinality);
+  public Matrix clone() {
+    return new MatrixView(matrix.clone(), offset, cardinality);
   }
 
   @Override
@@ -91,7 +91,7 @@
   }
 
   @Override
-  public int[] size() {
+  public int[] getNumNondefaultElements() {
     return cardinality;
   }
 
@@ -128,7 +128,7 @@
 
   @Override
   public Matrix assignColumn(int column, Vector other) {
-    if (cardinality[ROW] != other.cardinality())
+    if (cardinality[ROW] != other.size())
       throw new CardinalityException();
     for (int row = 0; row < cardinality[ROW]; row++)
       matrix.setQuick(row + offset[ROW], column + offset[COL], other
@@ -138,7 +138,7 @@
 
   @Override
   public Matrix assignRow(int row, Vector other) {
-    if (cardinality[COL] != other.cardinality())
+    if (cardinality[COL] != other.size())
       throw new CardinalityException();
     for (int col = 0; col < cardinality[COL]; col++)
       matrix

Added: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/OrderedIntDoubleMapping.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/OrderedIntDoubleMapping.java?rev=786370&view=auto
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/OrderedIntDoubleMapping.java (added)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/OrderedIntDoubleMapping.java Fri Jun 19 04:50:40 2009
@@ -0,0 +1,176 @@
+/**
+ * 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;
+
+import java.io.Serializable;
+
+final class OrderedIntDoubleMapping implements Serializable, Cloneable {
+
+  private static final double DEFAULT_VALUE = 0.0;
+
+  private int[] indices;
+  private double[] values;
+  private int numMappings;
+
+  OrderedIntDoubleMapping() {
+    // no-arg constructor for deserializer
+    this(11);
+  }
+
+  OrderedIntDoubleMapping(int capacity) {
+    indices = new int[capacity];
+    values = new double[capacity];
+    numMappings = 0;
+  }
+
+  int[] getIndices() {
+    return indices;
+  }
+
+  double[] getValues() {
+    return values;
+  }
+
+  int getNumMappings() {
+    return numMappings;
+  }
+
+  private void growTo(int newCapacity) {
+    if (newCapacity > indices.length) {
+      int[] newIndices = new int[newCapacity];
+      System.arraycopy(indices, 0, newIndices, 0, numMappings);
+      indices = newIndices;
+      double[] newValues = new double[newCapacity];
+      System.arraycopy(values, 0, newValues, 0, numMappings);
+      values = newValues;
+    }
+  }
+
+  private int find(int index) {
+    int low = 0;
+    int high = numMappings - 1;
+    while (low <= high) {
+      int mid = low + ((high - low) >>> 1);
+      int midVal = indices[mid];
+      if (midVal < index) {
+        low = mid + 1;
+      } else if (midVal > index) {
+        high = mid - 1;
+      } else {
+        return mid;
+      }
+    }
+    return -(low + 1);
+  }
+
+  public double get(int index) {
+    int offset = find(index);
+    return offset >= 0 ? values[offset] : DEFAULT_VALUE;
+  }
+
+  public void set(int index, double value) {
+    int offset = find(index);
+    if (offset >= 0) {
+      if (value == DEFAULT_VALUE) {
+        for (int i = offset + 1, j = offset; i < numMappings; i++, j++) {
+          indices[j] = indices[i];
+          values[j] = values[i];
+        }
+        numMappings--;
+      } else {
+        values[offset] = value;
+      }
+    } else {
+      if (value != DEFAULT_VALUE) {
+        if (numMappings >= indices.length) {
+          growTo(Math.max((int) (1.2 * numMappings), numMappings + 1));
+        }
+        int at = -offset - 1;
+        if (numMappings > at) {
+          for (int i = numMappings - 1, j = numMappings; i >= at; i--, j--) {
+            indices[j] = indices[i];
+            values[j] = values[i];
+          }
+        }
+        indices[at] = index;
+        values[at] = value;
+        numMappings++;
+      }
+    }
+  }
+
+  @Override
+  public int hashCode() {
+    int result = 0;
+    for (int i = 0; i < numMappings; i++) {
+      result = 31 * result + indices[i];
+      result = 31 * result + (int) Double.doubleToRawLongBits(values[i]);
+    }
+    return result;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (o instanceof OrderedIntDoubleMapping) {
+      OrderedIntDoubleMapping other = (OrderedIntDoubleMapping) o;
+      if (numMappings == other.numMappings) {
+        for (int i = 0; i < numMappings; i++) {
+          if (indices[i] != other.indices[i] || values[i] != other.values[i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder result = new StringBuilder(10* numMappings);
+    for (int i = 0; i < numMappings; i++) {
+      result.append('(');
+      result.append(indices[i]);
+      result.append(',');
+      result.append(values[i]);
+      result.append(')');
+    }
+    return result.toString();
+  }
+
+  @Override
+  public Object clone() {
+    OrderedIntDoubleMapping clone = new OrderedIntDoubleMapping(numMappings);
+    System.arraycopy(indices, 0, clone.indices, 0, numMappings);
+    System.arraycopy(values, 0, clone.values, 0, numMappings);
+    clone.numMappings = numMappings;
+    return clone;
+  }
+
+  public static void main(String[] args) {
+    OrderedIntDoubleMapping test = new OrderedIntDoubleMapping(3);
+    test.set(7, 10.0);
+    test.set(10, 13.0);
+    test.set(3, 4.0);
+    test.set(1, 3.0);
+    test.set(7, 0.0);
+    test.set(1, 0.0);
+    System.out.println(test);
+  }
+
+}

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseColumnMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseColumnMatrix.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseColumnMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseColumnMatrix.java Fri Jun 19 04:50:40 2009
@@ -44,7 +44,7 @@
     this.cardinality = cardinality.clone();
     this.columns = columns.clone();
     for (int col = 0; col < cardinality[COL]; col++)
-      this.columns[col] = columns[col].copy();
+      this.columns[col] = columns[col].clone();
   }
 
   /**
@@ -66,15 +66,15 @@
   }
 
   @Override
-  public int[] cardinality() {
+  public int[] size() {
     return cardinality;
   }
 
   @Override
-  public Matrix copy() {
+  public Matrix clone() {
     SparseColumnMatrix copy = new SparseColumnMatrix(cardinality);
     for (int col = 0; col < cardinality[COL]; col++)
-      copy.columns[col] = columns[col].copy();
+      copy.columns[col] = columns[col].clone();
     return copy;
   }
 
@@ -114,11 +114,11 @@
   }
 
   @Override
-  public int[] size() {
+  public int[] getNumNondefaultElements() {
     int[] result = new int[2];
     result[COL] = columns.length;
     for (int col = 0; col < cardinality[COL]; col++)
-      result[ROW] = Math.max(result[ROW], columns[col].size());
+      result[ROW] = Math.max(result[ROW], columns[col].getNumNondefaultElements());
     return result;
   }
 
@@ -133,18 +133,18 @@
 
   @Override
   public Matrix viewPart(int[] offset, int[] size) {
-    if (size[COL] > columns.length || size[ROW] > columns[COL].cardinality())
+    if (size[COL] > columns.length || size[ROW] > columns[COL].size())
       throw new CardinalityException();
     if (offset[COL] < 0 || offset[COL] + size[COL] > columns.length
         || offset[ROW] < 0
-        || offset[ROW] + size[ROW] > columns[COL].cardinality())
+        || offset[ROW] + size[ROW] > columns[COL].size())
       throw new IndexException();
     return new MatrixView(this, offset, size);
   }
 
   @Override
   public Matrix assignColumn(int column, Vector other) {
-    if (other.cardinality() != cardinality[ROW] || column >= cardinality[COL])
+    if (other.size() != cardinality[ROW] || column >= cardinality[COL])
       throw new CardinalityException();
     columns[column].assign(other);
     return this;
@@ -152,7 +152,7 @@
 
   @Override
   public Matrix assignRow(int row, Vector other) {
-    if (row >= cardinality[ROW] || other.cardinality() != cardinality[COL])
+    if (row >= cardinality[ROW] || other.size() != cardinality[COL])
       throw new CardinalityException();
     for (int col = 0; col < cardinality[COL]; col++)
       columns[col].setQuick(row, other.getQuick(col));

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseMatrix.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseMatrix.java Fri Jun 19 04:50:40 2009
@@ -46,7 +46,7 @@
     this.cardinality = cardinality.clone();
     this.rows = new HashMap<Integer, Vector>();
     for (Map.Entry<Integer, SparseVector> entry : rows.entrySet())
-      this.rows.put(entry.getKey(), entry.getValue().copy());
+      this.rows.put(entry.getKey(), entry.getValue().clone());
   }
 
   /**
@@ -66,15 +66,15 @@
   }
 
   @Override
-  public int[] cardinality() {
+  public int[] size() {
     return cardinality;
   }
 
   @Override
-  public Matrix copy() {
+  public Matrix clone() {
     SparseMatrix copy = new SparseMatrix(cardinality);
     for (Map.Entry<Integer, Vector> entry : rows.entrySet())
-      copy.rows.put(entry.getKey(), entry.getValue().copy());
+      copy.rows.put(entry.getKey(), entry.getValue().clone());
     return copy;
   }
 
@@ -117,11 +117,11 @@
   }
 
   @Override
-  public int[] size() {
+  public int[] getNumNondefaultElements() {
     int[] result = new int[2];
     result[ROW] = rows.size();
     for (Map.Entry<Integer, Vector> integerVectorEntry : rows.entrySet())
-      result[COL] = Math.max(result[COL], integerVectorEntry.getValue().size());
+      result[COL] = Math.max(result[COL], integerVectorEntry.getValue().getNumNondefaultElements());
     return result;
   }
 
@@ -146,7 +146,7 @@
 
   @Override
   public Matrix assignColumn(int column, Vector other) {
-    if (other.cardinality() != cardinality[ROW] || column >= cardinality[COL])
+    if (other.size() != cardinality[ROW] || column >= cardinality[COL])
       throw new CardinalityException();
     for (int row = 0; row < cardinality[ROW]; row++) {
       double val = other.getQuick(row);
@@ -165,7 +165,7 @@
 
   @Override
   public Matrix assignRow(int row, Vector other) {
-    if (row >= cardinality[ROW] || other.cardinality() != cardinality[COL])
+    if (row >= cardinality[ROW] || other.size() != cardinality[COL])
       throw new CardinalityException();
     rows.put(row, other);
     return this;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseRowMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseRowMatrix.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseRowMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseRowMatrix.java Fri Jun 19 04:50:40 2009
@@ -46,7 +46,7 @@
     this.cardinality = cardinality.clone();
     this.rows = rows.clone();
     for (int row = 0; row < cardinality[ROW]; row++)
-      this.rows[row] = rows[row].copy();
+      this.rows[row] = rows[row].clone();
   }
 
   /**
@@ -69,15 +69,15 @@
   }
 
   @Override
-  public int[] cardinality() {
+  public int[] size() {
     return cardinality;
   }
 
   @Override
-  public Matrix copy() {
+  public Matrix clone() {
     SparseRowMatrix copy = new SparseRowMatrix(cardinality);
     for (int row = 0; row < cardinality[ROW]; row++)
-      copy.rows[row] = rows[row].copy();
+      copy.rows[row] = rows[row].clone();
     return copy;
   }
 
@@ -115,11 +115,11 @@
   }
 
   @Override
-  public int[] size() {
+  public int[] getNumNondefaultElements() {
     int[] result = new int[2];
     result[ROW] = rows.length;
     for (int row = 0; row < cardinality[ROW]; row++)
-      result[COL] = Math.max(result[COL], rows[row].size());
+      result[COL] = Math.max(result[COL], rows[row].getNumNondefaultElements());
     return result;
   }
 
@@ -134,17 +134,17 @@
 
   @Override
   public Matrix viewPart(int[] offset, int[] size) {
-    if (size[ROW] > rows.length || size[COL] > rows[ROW].cardinality())
+    if (size[ROW] > rows.length || size[COL] > rows[ROW].size())
       throw new CardinalityException();
     if (offset[ROW] < 0 || offset[ROW] + size[ROW] > rows.length
-        || offset[COL] < 0 || offset[COL] + size[COL] > rows[ROW].cardinality())
+        || offset[COL] < 0 || offset[COL] + size[COL] > rows[ROW].size())
       throw new IndexException();
     return new MatrixView(this, offset, size);
   }
 
   @Override
   public Matrix assignColumn(int column, Vector other) {
-    if (other.cardinality() != cardinality[ROW] || column >= cardinality[COL])
+    if (other.size() != cardinality[ROW] || column >= cardinality[COL])
       throw new CardinalityException();
     for (int row = 0; row < cardinality[ROW]; row++)
       rows[row].setQuick(column, other.getQuick(row));
@@ -153,7 +153,7 @@
 
   @Override
   public Matrix assignRow(int row, Vector other) {
-    if (row >= cardinality[ROW] || other.cardinality() != cardinality[COL])
+    if (row >= cardinality[ROW] || other.size() != cardinality[COL])
       throw new CardinalityException();
     rows[row].assign(other);
     return this;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseVector.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseVector.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseVector.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/SparseVector.java Fri Jun 19 04:50:40 2009
@@ -20,8 +20,7 @@
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.NoSuchElementException;
 
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.io.WritableComparable;
@@ -35,24 +34,24 @@
   public SparseVector() {
   }
 
-  public SparseVector(String name) {
-    super(name);
-  }
-
-  private Map<Integer, Double> values;
+  private OrderedIntDoubleMapping values;
 
   private int cardinality;
 
   public static boolean optimizeTimes = true;
 
-  public SparseVector(int cardinality) {
-    this(null, cardinality);
+  public SparseVector(String name, int cardinality, int size) {
+    super(name);
+    values = new OrderedIntDoubleMapping(size);
+    this.cardinality = cardinality;
   }
 
   public SparseVector(String name, int cardinality) {
-    super(name);
-    values = new HashMap<Integer, Double>();
-    this.cardinality = cardinality;
+    this(name, cardinality, cardinality / 8); // arbitrary estimate of 'sparseness'
+  }
+
+  public SparseVector(int cardinality) {
+    this(null, cardinality, cardinality / 8); // arbitrary estimate of 'sparseness'
   }
 
   @Override
@@ -68,45 +67,30 @@
   }
 
   @Override
-  public int cardinality() {
+  public int size() {
     return cardinality;
   }
 
   @Override
-  public SparseVector copy() {
+  public SparseVector clone() {
     SparseVector result = like();
-     for (Map.Entry<Integer, Double> entry : values.entrySet()) {
-      result.setQuick(entry.getKey(), entry.getValue());
-    }
+    result.values = (OrderedIntDoubleMapping) values.clone();
     return result;
   }
 
   @Override
   public double getQuick(int index) {
-    Double value = values.get(index);
-    return value == null ? 0.0 : value;
+    return values.get(index);
   }
 
   @Override
   public void setQuick(int index, double value) {
-    if (value == 0.0)
-      values.remove(index);
-    else
-      values.put(index, value);
+    values.set(index, value);
   }
 
   @Override
-  public int size() {
-    return values.size();
-  }
-
-  @Override
-  public double[] toArray() {
-    double[] result = new double[cardinality];
-    for (Map.Entry<Integer, Double> entry : values.entrySet()) {
-      result[entry.getKey()] = entry.getValue();
-    }
-    return result;
+  public int getNumNondefaultElements() {
+    return values.getNumMappings();
   }
 
   @Override
@@ -128,16 +112,12 @@
 
   @Override
   public SparseVector like() {
-    SparseVector sparseVector = new SparseVector(cardinality);
-    sparseVector.setLabelBindings(getLabelBindings());
-    return sparseVector;
+    return new SparseVector(cardinality);
   }
 
   @Override
   public Vector like(int newCardinality) {
-    SparseVector sparseVector = new SparseVector(newCardinality);
-    sparseVector.setLabelBindings(getLabelBindings());
-    return sparseVector;
+    return new SparseVector(newCardinality);
   }
 
   @Override
@@ -155,18 +135,13 @@
    * * @see AbstractVector#strictEquivalence(Vector, Vector)
    * @see AbstractVector#equivalent(Vector, Vector) 
    */
+  @Override
   public boolean equals(Object o) {
     if (this == o) return true;
     if (!(o instanceof Vector)) return false;
 
     Vector that = (Vector) o;
-    if (this.cardinality() != that.cardinality()) return false;
-    String thatName = that.getName();
-    if (name != null && thatName != null && !name.equals(thatName)){
-      return false;
-    } else if ((name != null && thatName == null) || (thatName != null && name == null)){
-      return false;
-    }
+    if (this.size() != that.size()) return false;
 
     if (that instanceof SparseVector) {
       return (values == null ? ((SparseVector) that).values == null : values.equals(((SparseVector) that).values));
@@ -177,7 +152,6 @@
   }
 
 
-
   @Override
   public int hashCode() {
     int result = (values != null ? values.hashCode() : 0);
@@ -187,20 +161,19 @@
   }
 
   private class Iterator implements java.util.Iterator<Vector.Element> {
-    private final java.util.Iterator<Map.Entry<Integer, Double>> it;
-
-    Iterator() {
-      it = values.entrySet().iterator();
-    }
+    private int offset = 0;
 
     @Override
     public boolean hasNext() {
-      return it.hasNext();
+      return offset < values.getNumMappings();
     }
 
     @Override
     public Element next() {
-      return new Element(it.next().getKey());
+      if (offset < values.getNumMappings()) {
+        return new Element(values.getIndices()[offset++]);
+      }
+      throw new NoSuchElementException();
     }
 
     @Override
@@ -212,7 +185,7 @@
   @Override
   public double zSum() {
     double result = 0.0;
-    for (Double value : values.values()) {
+    for (double value : values.getValues()) {
       result += value;
     }
     return result;
@@ -220,19 +193,19 @@
 
   @Override
   public double dot(Vector x) {
-    if (cardinality() != x.cardinality())
+    if (size() != x.size())
       throw new CardinalityException();
     double result = 0.0;
-    for (Map.Entry<Integer, Double> entry : values.entrySet()) {
-      result += entry.getValue() * x.getQuick(entry.getKey());
+    for (int index : values.getIndices()) {
+      result += values.get(index) * x.getQuick(index);
     }
     return result;
   }
 
   @Override
   public void write(DataOutput dataOutput) throws IOException {
-    dataOutput.writeInt(cardinality());
     dataOutput.writeInt(size());
+    dataOutput.writeInt(getNumNondefaultElements());
     for (Vector.Element element : this) {
       if (element.get() != 0.0d) {
         dataOutput.writeInt(element.index());
@@ -245,9 +218,9 @@
   public void readFields(DataInput dataInput) throws IOException {
     int cardinality = dataInput.readInt();
     int size = dataInput.readInt();
-    Map<Integer, Double> values = new HashMap<Integer, Double>(size);
+    OrderedIntDoubleMapping values = new OrderedIntDoubleMapping(size);
     for (int i = 0; i < size; i++) {
-      values.put(dataInput.readInt(), dataInput.readDouble());
+      values.set(dataInput.readInt(), dataInput.readDouble());
     }
     this.cardinality = cardinality;
     this.values = values;
@@ -264,8 +237,8 @@
         result.setQuick(index, value * x);
       }
     } else {
-      result = copy();
-      for (int i = 0; i < result.cardinality(); i++)
+      result = clone();
+      for (int i = 0; i < result.size(); i++)
         result.setQuick(i, getQuick(i) * x);
     }
     return result;
@@ -273,7 +246,7 @@
 
   @Override
   public Vector times(Vector x) {
-    if (cardinality() != x.cardinality())
+    if (size() != x.size())
       throw new CardinalityException();
     Vector result;
     if (optimizeTimes) {
@@ -284,8 +257,8 @@
         result.setQuick(index, value * x.getQuick(index));
       }
     } else {
-      result = copy();
-      for (int i = 0; i < result.cardinality(); i++)
+      result = clone();
+      for (int i = 0; i < result.size(); i++)
         result.setQuick(i, getQuick(i) * x.getQuick(i));
     }
     return result;

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=786370&r1=786369&r2=786370&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 Jun 19 04:50:40 2009
@@ -112,14 +112,14 @@
    * 
    * @return an int
    */
-  int cardinality();
+  int size();
 
   /**
    * Return a copy of the recipient
    * 
    * @return a new Vector
    */
-  Vector copy();
+  Vector clone();
 
   /**
    * Return the value at the index defined by the label
@@ -317,7 +317,7 @@
   /**
    * Sets a map of label bindings in the receiver
    * 
-   * @param bindings a Map<String, Integer> of label bindings
+   * @param bindings a {@link Map<String, Integer>} of label bindings
    */
   void setLabelBindings(Map<String, Integer> bindings);
 
@@ -343,7 +343,7 @@
    * 
    * @return an int
    */
-  int size();
+  int getNumNondefaultElements();
 
   /**
    * Return a new matrix containing the product of each value of the recipient
@@ -365,13 +365,6 @@
   Vector times(Vector x);
 
   /**
-   * Return the element of the recipient as a double[]
-   * 
-   * @return a double[]
-   */
-  double[] toArray();
-
-  /**
    * Return a new matrix containing the subset of the recipient
    * 
    * @param offset an int offset into the receiver

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/VectorView.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/VectorView.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/VectorView.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/VectorView.java Fri Jun 19 04:50:40 2009
@@ -62,13 +62,13 @@
   }
 
   @Override
-  public int cardinality() {
+  public int size() {
     return cardinality;
   }
 
   @Override
-  public Vector copy() {
-    return new VectorView(vector.copy(), offset, cardinality);
+  public Vector clone() {
+    return new VectorView(vector.clone(), offset, cardinality);
   }
 
   @Override
@@ -92,19 +92,11 @@
   }
 
   @Override
-  public int size() {
+  public int getNumNondefaultElements() {
     return cardinality;
   }
 
   @Override
-  public double[] toArray() {
-    double[] result = new double[cardinality];
-    for (int i = 0; i < cardinality; i++)
-      result[i] = vector.getQuick(offset + i);
-    return result;
-  }
-
-  @Override
   public Vector viewPart(int offset, int length) {
     if (length > cardinality)
       throw new CardinalityException();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/CosineDistanceMeasure.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/CosineDistanceMeasure.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/CosineDistanceMeasure.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/CosineDistanceMeasure.java Fri Jun 19 04:50:40 2009
@@ -66,11 +66,11 @@
 
   @Override
   public double distance(Vector v1, Vector v2) {
-    if (v1.cardinality() != v2.cardinality())
+    if (v1.size() != v2.size())
       throw new CardinalityException();
 	  double lengthSquaredv1 = 0.0;
 	  double lengthSquaredv2 = 0.0;
-	  for (int i = 0; i < v1.cardinality(); i++) {
+	  for (int i = 0; i < v1.size(); i++) {
 	    lengthSquaredv1 += v1.getQuick(i) * v1.getQuick(i);
 	    lengthSquaredv2 += v2.getQuick(i) * v2.getQuick(i);
 	  }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/EuclideanDistanceMeasure.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/EuclideanDistanceMeasure.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/EuclideanDistanceMeasure.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/EuclideanDistanceMeasure.java Fri Jun 19 04:50:40 2009
@@ -57,10 +57,10 @@
 
   @Override
   public double distance(Vector v1, Vector v2) {
-    if (v1.cardinality() != v2.cardinality())
+    if (v1.size() != v2.size())
       throw new CardinalityException();
     double result = 0;
-    for (int i = 0; i < v1.cardinality(); i++) {
+    for (int i = 0; i < v1.size(); i++) {
       double delta = v2.getQuick(i) - v1.getQuick(i);
       result += delta * delta;
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/ManhattanDistanceMeasure.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/ManhattanDistanceMeasure.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/ManhattanDistanceMeasure.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/ManhattanDistanceMeasure.java Fri Jun 19 04:50:40 2009
@@ -55,10 +55,10 @@
 
  @Override
  public double distance(Vector v1, Vector v2) {
-    if (v1.cardinality() != v2.cardinality())
+    if (v1.size() != v2.size())
       throw new CardinalityException();
     double result = 0;
-    for (int i = 0; i < v1.cardinality(); i++)
+    for (int i = 0; i < v1.size(); i++)
       result += Math.abs(v2.getQuick(i) - v1.getQuick(i));
     return result;
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/TanimotoDistanceMeasure.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/TanimotoDistanceMeasure.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/TanimotoDistanceMeasure.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/TanimotoDistanceMeasure.java Fri Jun 19 04:50:40 2009
@@ -46,7 +46,7 @@
     // this whole distance measurent thing
     // should be evaluated using an intermediate vector and BinaryFunction or something?
     
-    Set<Integer> featuresSeen = new HashSet<Integer>((int)((vector0.size() + vector1.size()) * 0.75));
+    Set<Integer> featuresSeen = new HashSet<Integer>((int)((vector0.getNumNondefaultElements() + vector1.getNumNondefaultElements()) * 0.75));
 
     double ab = 0.0;
     double a2 = 0.0;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedEuclideanDistanceMeasure.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedEuclideanDistanceMeasure.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedEuclideanDistanceMeasure.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedEuclideanDistanceMeasure.java Fri Jun 19 04:50:40 2009
@@ -30,11 +30,11 @@
     double result = 0;
     Vector res = p2.minus(p1);
     if (weights == null) {
-      for (int i = 0; i < p1.cardinality(); i++) {
+      for (int i = 0; i < p1.size(); i++) {
         result += res.get(i) * res.get(i);
       }
     } else {
-      for (int i = 0; i < p1.cardinality(); i++) {
+      for (int i = 0; i < p1.size(); i++) {
         result += res.get(i) * res.get(i) * weights.get(i);  // todo this is where the weights goes, right?
       }
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedManhattanDistanceMeasure.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedManhattanDistanceMeasure.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedManhattanDistanceMeasure.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedManhattanDistanceMeasure.java Fri Jun 19 04:50:40 2009
@@ -31,12 +31,12 @@
 
     Vector res = p2.minus(p1);
     if (weights == null) {
-      for (int i = 0; i < res.cardinality(); i++) {
+      for (int i = 0; i < res.size(); i++) {
         result += Math.abs(res.get(i));
       }
     }
     else {
-      for (int i = 0; i < res.cardinality(); i++) {
+      for (int i = 0; i < res.size(); i++) {
         result += Math.abs(res.get(i) * weights.get(i)); // todo this is where the weights goes, right?
       }
     }

Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/canopy/TestCanopyCreation.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/canopy/TestCanopyCreation.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/canopy/TestCanopyCreation.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/canopy/TestCanopyCreation.java Fri Jun 19 04:50:40 2009
@@ -123,7 +123,7 @@
           testCanopy.getNumPoints());
       Vector refCentroid = refCanopy.computeCentroid();
       Vector testCentroid = testCanopy.computeCentroid();
-      for (int pointIx = 0; pointIx < refCentroid.cardinality(); pointIx++) {
+      for (int pointIx = 0; pointIx < refCentroid.size(); pointIx++) {
         assertEquals("canopy centroid " + canopyIx + '[' + pointIx + ']',
             refCentroid.get(pointIx), testCentroid.get(pointIx));
       }

Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/dirichlet/TestMapReduce.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/dirichlet/TestMapReduce.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/dirichlet/TestMapReduce.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/clustering/dirichlet/TestMapReduce.java Fri Jun 19 04:50:40 2009
@@ -322,8 +322,8 @@
     assertEquals("modelFactory", state.modelFactory.getClass().getName(),
         state2.modelFactory.getClass().getName());
     assertEquals("clusters", state.clusters.size(), state2.clusters.size());
-    assertEquals("mixture", state.mixture.cardinality(), state2.mixture
-        .cardinality());
+    assertEquals("mixture", state.mixture.size(), state2.mixture
+        .size());
     assertEquals("dirichlet", state.offset, state2.offset);
   }
 

Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/MatrixTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/MatrixTest.java?rev=786370&r1=786369&r2=786370&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/MatrixTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/matrix/MatrixTest.java Fri Jun 19 04:50:40 2009
@@ -46,14 +46,14 @@
   public abstract Matrix matrixFactory(double[][] values);
 
   public void testCardinality() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     assertEquals("row cardinality", values.length, c[ROW]);
     assertEquals("col cardinality", values[0].length, c[COL]);
   }
 
   public void testCopy() {
-    int[] c = test.cardinality();
-    Matrix copy = test.copy();
+    int[] c = test.size();
+    Matrix copy = test.clone();
     assertEquals("wrong class", copy.getClass(), test.getClass());
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -62,7 +62,7 @@
   }
 
   public void testGetQuick() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         assertEquals("value[" + row + "][" + col + ']', values[row][col], test
@@ -71,25 +71,25 @@
 
   public void testHaveSharedCells() {
     assertTrue("same", test.haveSharedCells(test));
-    assertFalse("different", test.haveSharedCells(test.copy()));
+    assertFalse("different", test.haveSharedCells(test.clone()));
   }
 
   public void testLike() {
     Matrix like = test.like();
     assertEquals("type", like.getClass(), test.getClass());
-    assertEquals("rows", test.cardinality()[ROW], like.cardinality()[ROW]);
-    assertEquals("columns", test.cardinality()[COL], like.cardinality()[COL]);
+    assertEquals("rows", test.size()[ROW], like.size()[ROW]);
+    assertEquals("columns", test.size()[COL], like.size()[COL]);
   }
 
   public void testLikeIntInt() {
     Matrix like = test.like(4, 4);
     assertEquals("type", like.getClass(), test.getClass());
-    assertEquals("rows", 4, like.cardinality()[ROW]);
-    assertEquals("columns", 4, like.cardinality()[COL]);
+    assertEquals("rows", 4, like.size()[ROW]);
+    assertEquals("columns", 4, like.size()[COL]);
   }
 
   public void testSetQuick() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++) {
         test.setQuick(row, col, 1.23);
@@ -99,14 +99,14 @@
   }
 
   public void testSize() {
-    int[] c = test.size();
+    int[] c = test.getNumNondefaultElements();
     assertEquals("row size", values.length, c[ROW]);
     assertEquals("col size", values[0].length, c[COL]);
   }
 
   public void testToArray() {
     double[][] array = test.toArray();
-    int[] c = test.cardinality();
+    int[] c = test.size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         assertEquals("value[" + row + "][" + col + ']', values[row][col],
@@ -117,7 +117,7 @@
     int[] offset = { 1, 1 };
     int[] size = { 2, 1 };
     Matrix view = test.viewPart(offset, size);
-    int[] c = view.cardinality();
+    int[] c = view.size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         assertEquals("value[" + row + "][" + col + ']',
@@ -164,7 +164,7 @@
   }
 
   public void testAssignDouble() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     test.assign(4.53);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -173,7 +173,7 @@
   }
 
   public void testAssignDoubleArrayArray() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     test.assign(new double[3][2]);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -182,7 +182,7 @@
   }
 
   public void testAssignDoubleArrayArrayCardinality() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     try {
       test.assign(new double[c[ROW] + 1][c[COL]]);
       fail("exception expected");
@@ -192,7 +192,7 @@
   }
 
   public void testAssignMatrixBinaryFunction() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     test.assign(test, new PlusFunction());
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -210,7 +210,7 @@
   }
 
   public void testAssignMatrix() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix value = test.like();
     value.assign(test);
     for (int row = 0; row < c[ROW]; row++)
@@ -229,7 +229,7 @@
   }
 
   public void testAssignUnaryFunction() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     test.assign(new NegateFunction());
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -238,7 +238,7 @@
   }
 
   public void testDivide() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix value = test.divide(4.53);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -247,7 +247,7 @@
   }
 
   public void testGet() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
         assertEquals("value[" + row + "][" + col + ']', values[row][col], test
@@ -255,7 +255,7 @@
   }
 
   public void testGetIndexUnder() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     try {
       for (int row = -1; row < c[ROW]; row++)
         for (int col = 0; col < c[COL]; col++)
@@ -267,7 +267,7 @@
   }
 
   public void testGetIndexOver() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     try {
       for (int row = 0; row < c[ROW] + 1; row++)
         for (int col = 0; col < c[COL]; col++)
@@ -279,7 +279,7 @@
   }
 
   public void testMinus() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix value = test.minus(test);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -297,7 +297,7 @@
   }
 
   public void testPlusDouble() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix value = test.plus(4.53);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -306,7 +306,7 @@
   }
 
   public void testPlusMatrix() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix value = test.plus(test);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -324,7 +324,7 @@
   }
 
   public void testSetUnder() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     try {
       for (int row = -1; row < c[ROW]; row++)
         for (int col = 0; col < c[COL]; col++) {
@@ -337,7 +337,7 @@
   }
 
   public void testSetOver() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     try {
       for (int row = 0; row < c[ROW] + 1; row++)
         for (int col = 0; col < c[COL]; col++) {
@@ -350,7 +350,7 @@
   }
 
   public void testTimesDouble() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix value = test.times(4.53);
     for (int row = 0; row < c[ROW]; row++)
       for (int col = 0; col < c[COL]; col++)
@@ -359,10 +359,10 @@
   }
 
   public void testTimesMatrix() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix transpose = test.transpose();
     Matrix value = test.times(transpose);
-    int[] v = value.cardinality();
+    int[] v = value.size();
     assertEquals("rows", c[ROW], v[ROW]);
     assertEquals("cols", c[ROW], v[COL]);
     // TODO: check the math too, lazy
@@ -382,9 +382,9 @@
   }
 
   public void testTranspose() {
-    int[] c = test.cardinality();
+    int[] c = test.size();
     Matrix transpose = test.transpose();
-    int[] t = transpose.cardinality();
+    int[] t = transpose.size();
     assertEquals("rows", c[COL], t[ROW]);
     assertEquals("cols", c[ROW], t[COL]);
     for (int row = 0; row < c[ROW]; row++)
@@ -435,7 +435,7 @@
 
   public void testGetRow() {
     Vector row = test.getRow(1);
-    assertEquals("row size", 2, row.size());
+    assertEquals("row size", 2, row.getNumNondefaultElements());
   }
 
   public void testGetRowIndexUnder() {
@@ -458,7 +458,7 @@
 
   public void testGetColumn() {
     Vector column = test.getColumn(1);
-    assertEquals("row size", 3, column.size());
+    assertEquals("row size", 3, column.getNumNondefaultElements());
   }
 
   public void testGetColumnIndexUnder() {

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=786370&r1=786369&r2=786370&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 Jun 19 04:50:40 2009
@@ -41,23 +41,23 @@
   }
 
   public void testCardinality() {
-    assertEquals("cardinality", 3, test.cardinality());
+    assertEquals("cardinality", 3, test.size());
   }
 
   public void testCopy() throws Exception {
-    Vector copy = test.copy();
-    for (int i = 0; i < test.cardinality(); i++)
+    Vector copy = test.clone();
+    for (int i = 0; i < test.size(); i++)
       assertEquals("copy [" + i + ']', test.get(i), copy.get(i));
   }
 
   public void testGet() throws Exception {
-    for (int i = 0; i < test.cardinality(); i++)
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', values[i], test.get(i));
   }
 
   public void testGetOver() {
     try {
-      test.get(test.cardinality());
+      test.get(test.size());
       fail("expected exception");
     } catch (IndexException e) {
       assertTrue(true);
@@ -75,7 +75,7 @@
 
   public void testSet() throws Exception {
     test.set(2, 4.5);
-    for (int i = 0; i < test.cardinality(); i++)
+    for (int i = 0; i < test.size(); i++)
       if (i == 2)
         assertEquals("set [" + i + ']', 4.5, test.get(i));
       else
@@ -83,19 +83,13 @@
   }
 
   public void testSize() throws Exception {
-    assertEquals("size", 3, test.size());
-  }
-
-  public void testToArray() throws Exception {
-    double[] val = test.toArray();
-    for (int i = 0; i < test.cardinality(); i++)
-      assertEquals("get [" + i + ']', val[i], test.get(i));
+    assertEquals("size", 3, test.getNumNondefaultElements());
   }
 
   public void testViewPart() throws Exception {
     Vector part = test.viewPart(1, 2);
-    assertEquals("part size", 2, part.size());
-    for (int i = 0; i < part.cardinality(); i++)
+    assertEquals("part size", 2, part.getNumNondefaultElements());
+    for (int i = 0; i < part.size(); i++)
       assertEquals("part[" + i + ']', values[i + 1], part.get(i));
   }
 
@@ -134,19 +128,19 @@
 
   public void testDecodeVector() throws Exception {
     Vector val = AbstractVector.decodeVector(test.asFormatString());
-    for (int i = 0; i < test.cardinality(); i++)
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', test.get(i), val.get(i));
   }
 
   public void testDenseVectorDoubleArray() throws Exception {
-    for (int i = 0; i < test.cardinality(); i++)
+    for (int i = 0; i < test.size(); i++)
       assertEquals("test[" + i + ']', values[i], test.get(i));
   }
 
   public void testDenseVectorInt() throws Exception {
     Vector val = new DenseVector(4);
-    assertEquals("cardinality", 4, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 4, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', 0.0, val.get(i));
   }
 
@@ -157,7 +151,7 @@
 
   public void testDotCardinality() {
     try {
-      test.dot(new DenseVector(test.cardinality() + 1));
+      test.dot(new DenseVector(test.size() + 1));
       fail("expected exception");
     } catch (CardinalityException e) {
       assertTrue(true);
@@ -167,34 +161,34 @@
   public void testNormalize() throws Exception {
     Vector res = test.normalize();
     double mag = Math.sqrt(1.1 * 1.1 + 2.2 * 2.2 + 3.3 * 3.3);
-    for (int i = 0; i < test.cardinality(); i++)
+    for (int i = 0; i < test.size(); i++)
       assertEquals("dot", values[i] / mag, res.get(i));
   }
 
   public void testMinus() throws Exception {
     Vector val = test.minus(test);
-    assertEquals("cardinality", 3, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 3, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', 0.0, val.get(i));
   }
 
   public void testPlusDouble() throws Exception {
     Vector val = test.plus(1);
-    assertEquals("cardinality", 3, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 3, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', values[i] + 1, val.get(i));
   }
 
   public void testPlusVector() throws Exception {
     Vector val = test.plus(test);
-    assertEquals("cardinality", 3, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 3, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', values[i] * 2, val.get(i));
   }
 
   public void testPlusVectorCardinality() {
     try {
-      test.plus(new DenseVector(test.cardinality() + 1));
+      test.plus(new DenseVector(test.size() + 1));
       fail("expected exception");
     } catch (CardinalityException e) {
       assertTrue(true);
@@ -203,28 +197,28 @@
 
   public void testTimesDouble() throws Exception {
     Vector val = test.times(3);
-    assertEquals("cardinality", 3, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 3, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', values[i] * 3, val.get(i));
   }
 
   public void testDivideDouble() throws Exception {
     Vector val = test.divide(3);
-    assertEquals("cardinality", 3, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 3, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', values[i] / 3, val.get(i));
   }
 
   public void testTimesVector() throws Exception {
     Vector val = test.times(test);
-    assertEquals("cardinality", 3, val.cardinality());
-    for (int i = 0; i < test.cardinality(); i++)
+    assertEquals("cardinality", 3, val.size());
+    for (int i = 0; i < test.size(); i++)
       assertEquals("get [" + i + ']', values[i] * values[i], val.get(i));
   }
 
   public void testTimesVectorCardinality() {
     try {
-      test.times(new DenseVector(test.cardinality() + 1));
+      test.times(new DenseVector(test.size() + 1));
       fail("expected exception");
     } catch (CardinalityException e) {
       assertTrue(true);
@@ -247,7 +241,7 @@
   }
 
   public void testAssignDoubleArray() throws Exception {
-    double[] array = new double[test.cardinality()];
+    double[] array = new double[test.size()];
     test.assign(array);
     for (int i = 0; i < values.length; i++) {
       assertEquals("value[" + i + ']', 0.0, test.getQuick(i));
@@ -255,7 +249,7 @@
   }
 
   public void testAssignDoubleArrayCardinality() {
-    double[] array = new double[test.cardinality() + 1];
+    double[] array = new double[test.size() + 1];
     try {
       test.assign(array);
       fail("cardinality exception expected");
@@ -265,7 +259,7 @@
   }
 
   public void testAssignVector() throws Exception {
-    Vector other = new DenseVector(test.cardinality());
+    Vector other = new DenseVector(test.size());
     test.assign(other);
     for (int i = 0; i < values.length; i++) {
       assertEquals("value[" + i + ']', 0.0, test.getQuick(i));
@@ -273,7 +267,7 @@
   }
 
   public void testAssignVectorCardinality() {
-    Vector other = new DenseVector(test.cardinality() - 1);
+    Vector other = new DenseVector(test.size() - 1);
     try {
       test.assign(other);
       fail("cardinality exception expected");
@@ -342,15 +336,15 @@
   public void testLikeN() {
     Vector other = test.like(5);
     assertTrue("not like", other instanceof DenseVector);
-    assertEquals("cardinality", 5, other.cardinality());
+    assertEquals("size", 5, other.size());
   }
 
   public void testCrossProduct() {
     Matrix result = test.cross(test);
-    assertEquals("row cardinality", test.cardinality(), result.cardinality()[0]);
-    assertEquals("col cardinality", test.cardinality(), result.cardinality()[1]);
-    for (int row = 0; row < result.cardinality()[0]; row++) {
-      for (int col = 0; col < result.cardinality()[1]; col++) {
+    assertEquals("row size", test.size(), result.size()[0]);
+    assertEquals("col size", test.size(), result.size()[1]);
+    for (int row = 0; row < result.size()[0]; row++) {
+      for (int col = 0; col < result.size()[1]; col++) {
         assertEquals("cross[" + row + "][" + col + ']', test.getQuick(row)
             * test.getQuick(col), result.getQuick(row, col));
       }



Re: svn commit: r786370 [1/2] - in /lucene/mahout/trunk: core/src/main/java/org/apache/mahout/clustering/canopy/ core/src/main/java/org/apache/mahout/clustering/dirichlet/ core/src/main/java/org/apache/mahout/clustering/dirichlet/models/ core/src/main/java...

Posted by Jeff Eastman <jd...@windwardsolutions.com>.
Should Vector extend Cloneable too? I'm going to implement Matrix 
Writable today.
Jeff