claen up imports, make number of SISVD iterations (package-) configurable
diff --git a/src/main/java/com/yahoo/sketches/vector/decomposition/FrequentDirections.java b/src/main/java/com/yahoo/sketches/vector/decomposition/FrequentDirections.java
index d6f3f97..7b04e5f 100644
--- a/src/main/java/com/yahoo/sketches/vector/decomposition/FrequentDirections.java
+++ b/src/main/java/com/yahoo/sketches/vector/decomposition/FrequentDirections.java
@@ -27,7 +27,6 @@
import static com.yahoo.sketches.vector.decomposition.PreambleUtil.insertSVAdjustment;
import static com.yahoo.sketches.vector.decomposition.PreambleUtil.insertSerVer;
-import com.yahoo.sketches.vector.matrix.MatrixType;
import org.ojalgo.array.Array1D;
import org.ojalgo.matrix.decomposition.SingularValue;
import org.ojalgo.matrix.store.MatrixStore;
@@ -38,7 +37,7 @@
import com.yahoo.memory.WritableMemory;
import com.yahoo.sketches.vector.MatrixFamily;
import com.yahoo.sketches.vector.matrix.Matrix;
-import com.yahoo.sketches.vector.matrix.MatrixBuilder;
+import com.yahoo.sketches.vector.matrix.MatrixType;
/**
* This class implements the Frequent Directions algorithm proposed by Edo Liberty in "Simple and
diff --git a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOps.java b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOps.java
index 7923b14..9c6cf7e 100644
--- a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOps.java
+++ b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOps.java
@@ -12,8 +12,8 @@
*/
public abstract class MatrixOps {
- // number of iterations for SISVD
- static final int DEFAULT_NUM_ITER = 200;
+ // iterations for SISVD
+ private static final int DEFAULT_NUM_ITER = 8;
/**
* Matrix dimensions
@@ -31,6 +31,8 @@
*/
final SVDAlgo algo_;
+ int numSISVDIter_;
+
/**
* Creates an empty MatrixOps object to support Frequent Directions matrix operations
*
@@ -68,6 +70,8 @@
d_ = d;
algo_ = algo;
k_ = k;
+
+ numSISVDIter_ = DEFAULT_NUM_ITER;
}
/**
@@ -128,4 +132,7 @@
*/
abstract MatrixOps svd(final Matrix A, final boolean computeVectors);
+ void setNumSISVDIter(final int numSISVDIter) {
+ numSISVDIter_ = numSISVDIter;
+ }
}
diff --git a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplMTJ.java b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplMTJ.java
index 58fd8aa..735ebc4 100644
--- a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplMTJ.java
+++ b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplMTJ.java
@@ -6,9 +6,9 @@
import java.util.concurrent.ThreadLocalRandom;
-import com.github.fommil.netlib.BLAS;
import org.netlib.util.intW;
+import com.github.fommil.netlib.BLAS;
import com.github.fommil.netlib.LAPACK;
import com.yahoo.sketches.vector.matrix.Matrix;
import com.yahoo.sketches.vector.matrix.MatrixImplMTJ;
@@ -23,7 +23,7 @@
/**
* Computes singular value decompositions
*/
-public class MatrixOpsImplMTJ extends MatrixOps {
+class MatrixOpsImplMTJ extends MatrixOps {
/**
* The singular values
@@ -253,7 +253,7 @@
final QR qr = new QR(block_.numRows(), block_.numColumns());
block_ = qr.factor(block_).getQ(); // important for numeric stability
- for (int i = 0; i < DEFAULT_NUM_ITER; ++i) {
+ for (int i = 0; i < numSISVDIter_; ++i) {
A.mult(block_, T_);
A.transAmult(T_, block_);
block_ = qr.factor(block_).getQ(); // again, for stability
diff --git a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplOjAlgo.java b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplOjAlgo.java
index 589377a..3434b19 100644
--- a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplOjAlgo.java
+++ b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplOjAlgo.java
@@ -1,6 +1,5 @@
package com.yahoo.sketches.vector.decomposition;
-import com.yahoo.sketches.vector.matrix.MatrixImplOjAlgo;
import org.ojalgo.matrix.decomposition.QR;
import org.ojalgo.matrix.decomposition.SingularValue;
import org.ojalgo.matrix.store.MatrixStore;
@@ -9,9 +8,10 @@
import org.ojalgo.random.Normal;
import com.yahoo.sketches.vector.matrix.Matrix;
+import com.yahoo.sketches.vector.matrix.MatrixImplOjAlgo;
import com.yahoo.sketches.vector.matrix.MatrixType;
-public class MatrixOpsImplOjAlgo extends MatrixOps {
+class MatrixOpsImplOjAlgo extends MatrixOps {
//private SingularValue<Double> svd;
private double[] sv_;
private PrimitiveDenseStore Vt_;
@@ -154,7 +154,7 @@
qr_.decompose(block_);
qr_.getQ().supplyTo(block_);
- for (int i = 0; i < DEFAULT_NUM_ITER; ++i) {
+ for (int i = 0; i < numSISVDIter_; ++i) {
A.multiply(block_).supplyTo(T_);
A.transpose().multiply(T_).supplyTo(block_);