public void correlation_new_interface()
{
double[] mean = Measures.Mean(data, dimension: 0);
double[] stdDev = Measures.StandardDeviation(data);
double[][] cov = Measures.Correlation(data.ToJagged());
var actual = PrincipalComponentAnalysis.FromCorrelationMatrix(mean, stdDev, cov.ToMatrix());
var expected = new PrincipalComponentAnalysis(PrincipalComponentMethod.CorrelationMatrix)
{
Means = mean,
StandardDeviations = stdDev
};
// Compute
actual.Compute();
var transform = expected.Learn(cov);
// Transform
double[,] actualTransform = actual.Transform(data);
double[,] expectedTransform = expected.Transform(data);
// Verify both are equal with 0.01 tolerance value
Assert.IsTrue(Matrix.IsEqual(actualTransform, expectedTransform, 0.01));
// Transform
double[,] image = actual.Transform(data);
double[,] reverse = actual.Revert(image);
// Verify both are equal with 0.01 tolerance value
Assert.IsTrue(Matrix.IsEqual(reverse, data, 1e-6));
// Transform
double[][] image2 = transform.Transform(data.ToJagged());
double[][] reverse2 = transform.Inverse().Transform(image2);
Assert.IsTrue(Matrix.IsEqual(reverse, reverse2, 1e-6));
Assert.IsTrue(Matrix.IsEqual(reverse2, data, 1e-6));
// Transform
double[][] reverse3 = actual.Revert(image2);
Assert.IsTrue(Matrix.IsEqual(reverse, reverse3, 1e-6));
Assert.IsTrue(Matrix.IsEqual(reverse3, data, 1e-6));
var a = transform.Transform(data.ToJagged()).ToMatrix();
Assert.IsTrue(Matrix.IsEqual(a, expectedTransform, 0.01));
}