Merge pull request #5 from apete/master
ojAlgo v47
diff --git a/pom.xml b/pom.xml
index 5aacf5a..b006255 100644
--- a/pom.xml
+++ b/pom.xml
@@ -149,7 +149,7 @@
<dependency>
<groupId>org.ojalgo</groupId>
<artifactId>ojalgo</artifactId>
- <version>45.0.0</version>
+ <version>47.0.0</version>
</dependency>
<dependency>
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 b5b522f..a9218ff 100644
--- a/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplOjAlgo.java
+++ b/src/main/java/com/yahoo/sketches/vector/decomposition/MatrixOpsImplOjAlgo.java
@@ -111,7 +111,7 @@
}
// store the result back in A
- S_.multiply(Vt_).supplyTo((PrimitiveDenseStore) A.getRawObject());
+ S_.multiply(Vt_, (PrimitiveDenseStore) A.getRawObject());
return svAdjustment;
}
@@ -132,7 +132,7 @@
S_.set(i, i, 0.0);
}
- S_.multiply(Vt_).supplyTo(result);
+ S_.multiply(Vt_, result);
return Matrix.wrap(result);
}
@@ -164,19 +164,17 @@
qr_.getQ().supplyTo(block_);
for (int i = 0; i < numSISVDIter_; ++i) {
- A.multiply(block_).supplyTo(T_);
- A.transpose().multiply(T_).supplyTo(block_);
+ A.multiply(block_, T_);
// again, just for stability
- qr_.decompose(block_);
+ qr_.decompose(T_.premultiply(A.transpose()));
qr_.getQ().supplyTo(block_);
}
// Rayleigh-Ritz postprocessing
- A.multiply(block_).supplyTo(T_);
final SingularValue<Double> svd = SingularValue.make(T_);
- svd.compute(T_);
+ svd.compute(block_.premultiply(A));
svd.getSingularValues(sv_);
@@ -188,14 +186,12 @@
}
private void computeSymmEigSVD(final MatrixStore<Double> A, final boolean computeVectors) {
- if (T_ == null) {
- T_ = PrimitiveDenseStore.FACTORY.makeZero(n_, n_);
+ if (evd_ == null) {
evd_ = Eigenvalue.PRIMITIVE.make(n_, true);
}
// want left singular vectors U, aka eigenvectors of AA^T -- so compute that
- A.multiply(A.transpose()).supplyTo(T_);
- evd_.decompose(T_);
+ evd_.decompose(A.transpose().premultiply(A));
// TODO: can we only use k_ values?
final double[] ev = new double[n_];
@@ -207,7 +203,7 @@
}
if (computeVectors) {
- S_.multiply(evd_.getV().transpose()).multiply(A).supplyTo(Vt_);
+ S_.multiply(evd_.getV().transpose()).multiply(A, Vt_);
}
}
}