private static List <List <double> > formFeatureVector(eigens input)
        {
            List <List <double> > output = new List <List <double> >();

            //!! Concern, do eigen values of a greater absolute value while negative supersede positive values?

            // Alglib eigenVectors and values are sorted in ascending order, so last 3 entries will be the 3 highest vectors
            //eigenVector   [dimension, vector]
            //              [row,col]
            //  Vector1 Vector2 Vector3 ... Vector 12
            //  dim 1   dim 1   dim 1
            //  dim 2   dim 2   dim 2
            //  dim 3   dim 3   dim 3
            //  dim 4   dim 4   dim 4
            //  dim 5   dim 5   dim 5
            //  ...     ...     ...
            //  dim 12  dim 12  dim 12

            //this makes the feature vector matrix with 3 rows of one eigenvector per
            //it is used like this when translating the data to new dimensions in pca
            for (int i = width - 1; i > width - 4; i--)
            {
                List <double> line = new List <double>();
                for (int j = 0; j < width; j++)
                {
                    line.Add(input.eigenVectors[j, i]);
                }
                output.Add(line);
            }
            return(output);
        }
 private static void listToDouble(List <List <adder> > inputMatrix, eigens output)
 {
     for (int i = 0; i < inputMatrix.Count; i++)
     {
         for (int j = 0; j < inputMatrix.Count; j++)
         {
             output.matrix[i, j] = inputMatrix[i][j].Value;
         }
     }
 }
        static private void findEigenVectors(List <List <adder> > inputMatrix, eigens output)
        {
            //create a matrix array from the list<list<double>>
            double[] valuesOut;
            double[,] vectorsOut;
            output.matrix = new double[width, width];
            listToDouble(inputMatrix, output);

            alglib.smatrixevd(output.matrix, width, 1, false, out valuesOut, out vectorsOut);

            output.eigenValues  = valuesOut;
            output.eigenVectors = vectorsOut;
        }
 public static void clear()      //resets all the data
                                 //simple fix for errors created by opening files.
                                 //could be coded better that data isnt left over from
                                 //previous files
 {
     size               = new int();
     width              = new int();
     means              = new List <double>();
     zeroData           = new List <List <double> >();
     zeroDataTransposed = new List <List <double> >();
     finalData          = new List <List <double> >(); // this will be the new data that is under 3 dimensions and is plot-able
     zeroMeans          = new List <double>();
     zeroVariance       = new List <double>();
     zeroCoVar          = new List <List <adder> >();
     zeroEigens         = new eigens();
     featureVector      = new List <List <double> >();
 }