It looks like this was discussed year ago here:
Apparently, the authors only stored half of the covariance matrix. @BiaseGabriel, you could try the following (untested):
auto original = pca.GetCovarianceMatrix();
TMatrixD copy(*original);
TMatrixDSym sym;
sym.Use(covarianceMatrix.GetNrows(), covarianceMatrix.GetMatrixArray());
sym.Print("");
If you are lucky, it understands how to take the correct half of the matrix, and you can do math with sym
. If it doesn’t understand it, you can symmetrise the matrix by assigning the elements
copy[i][j] = copy[j][i]
in the right order.
@moneta:
It looks like TPrincipal should be using an eigen-matrix from the start …