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));
+ }
+ }
}