Author: tdunning
Date: Thu Dec 22 23:51:56 2011
New Revision: 1222517

URL: http://svn.apache.org/viewvc?rev=1222517&view=rev
Log:
MAHOUT-792 - More small fixes.  Added internal exception class for 
CholeskyDecomp

Modified:
    
mahout/trunk/core/src/main/java/org/apache/mahout/math/ssvd/SequentialOutOfCoreSvd.java
    
mahout/trunk/math/src/main/java/org/apache/mahout/math/CholeskyDecomposition.java

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/math/ssvd/SequentialOutOfCoreSvd.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/ssvd/SequentialOutOfCoreSvd.java?rev=1222517&r1=1222516&r2=1222517&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/math/ssvd/SequentialOutOfCoreSvd.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/math/ssvd/SequentialOutOfCoreSvd.java
 Thu Dec 22 23:51:56 2011
@@ -103,10 +103,15 @@ public class SequentialOutOfCoreSvd {
     // step 1, compute R as in R'R = Y'Y where Y = A \Omega
     for (File file : partsOfA) {
       MatrixWritable m = new MatrixWritable();
-      m.readFields(new DataInputStream(new FileInputStream(file)));
+      DataInputStream in = new DataInputStream(new FileInputStream(file));
+      try {
+        m.readFields(in);
+      } finally {
+        in.close();
+      }
 
       Matrix aI = m.get();
-      Matrix omega = new RandomTrinaryMatrix(seed, aI.numCols(), 
internalDimension, false);
+      Matrix omega = new RandomTrinaryMatrix(seed, aI.columnSize(), 
internalDimension, false);
       Matrix y = aI.times(omega);
 
       if (y2 == null) {
@@ -123,11 +128,13 @@ public class SequentialOutOfCoreSvd {
       MatrixWritable m = new MatrixWritable();
       m.readFields(new DataInputStream(new FileInputStream(file)));
       Matrix aI = m.get();
-      ncols = Math.max(ncols, aI.numCols());
+      ncols = Math.max(ncols, aI.columnSize());
 
-      for (int j = 0; j + columnsPerSlice <= aI.numCols(); j += 
columnsPerSlice) {
-        Matrix omega = new RandomTrinaryMatrix(seed, aI.numCols(), 
internalDimension, false);
-        Matrix bIJ = 
r2.solveLeft(aI.times(omega).transpose().times(aI.viewPart(0, aI.numRows(), j, 
columnsPerSlice)));
+      Matrix omega = new RandomTrinaryMatrix(seed, aI.numCols(), 
internalDimension, false);
+      for (int j = 0; j < aI.numCols(); j += columnsPerSlice) {
+        Matrix yI = aI.times(omega);
+        Matrix aIJ = aI.viewPart(0, aI.rowSize(), j, Math.min(columnsPerSlice, 
aI.columnSize() - j));
+        Matrix bIJ = r2.solveRight(yI).transpose().times(aIJ);
         addToSavedCopy(bFile(tmpDir, j), bIJ);
       }
     }
@@ -168,10 +175,11 @@ public class SequentialOutOfCoreSvd {
         m.readFields(new DataInputStream(new FileInputStream(file)));
         Matrix aI = m.get();
 
-        Matrix y = aI.times(new RandomTrinaryMatrix(seed, aI.numCols(), dim, 
false).viewPart(i * columnsPerSlice, columnsPerSlice, 0, aI.numCols()));
-        m.set(r2.solveRight(y).times(svd.getU()));
+        Matrix y = aI.times(new RandomTrinaryMatrix(seed, aI.numCols(), dim, 
false));
+        Matrix uI = r2.solveRight(y).times(svd.getU());
+        m.set(uI);
         m.write(new DataOutputStream(new FileOutputStream(new File(tmpDir, 
uBase + i))));
-        i++;
+        i += aI.rowSize();
       }
     }
   }

Modified: 
mahout/trunk/math/src/main/java/org/apache/mahout/math/CholeskyDecomposition.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/CholeskyDecomposition.java?rev=1222517&r1=1222516&r2=1222517&view=diff
==============================================================================
--- 
mahout/trunk/math/src/main/java/org/apache/mahout/math/CholeskyDecomposition.java
 (original)
+++ 
mahout/trunk/math/src/main/java/org/apache/mahout/math/CholeskyDecomposition.java
 Thu Dec 22 23:51:56 2011
@@ -209,7 +209,7 @@ public class CholeskyDecomposition {
           int i = L.rowUnpivot(internalI);
           x.set(j, k, x.get(j, k) - x.get(j, i) * L.get(k, i));
           if (Double.isInfinite(x.get(j, k)) || Double.isNaN(x.get(j, k))) {
-            System.out.printf("bad at %d,%d\n", j, k);
+            throw new InvalidCholeskyState(j, k);
           }
         }
         if (L.get(k, k) != 0) {
@@ -218,11 +218,17 @@ public class CholeskyDecomposition {
           x.set(j, k, 0);
         }
         if (Double.isInfinite(x.get(j, k)) || Double.isNaN(x.get(j, k))) {
-          System.out.printf("bad at %d,%d\n", j, k);
+          throw new InvalidCholeskyState(j, k);
         }
       }
     }
     return x;
   }
+
+  private class InvalidCholeskyState extends RuntimeException {
+    public InvalidCholeskyState(int j, int k) {
+      super(String.format("Invalid value found at %d,%d (should not be 
possible)", j, k));
+    }
+  }
 }
 


Reply via email to