/// <summary> /// Test method to (manually) check if the pca computations are correct. /// Prints the base vectors computed with a mirage generated covariance /// matrix and with the classical self-implemented covariance computation. /// </summary> private void PcaEigenvectorBasisTest() { Mirage.Matrix m = new Mirage.Matrix (3, 5); m.d [0, 0] = 0.2f; m.d [1, 0] = 14.5f; m.d [2, 0] = 166.0f; m.d [0, 1] = 1.5f; m.d [1, 1] = 20.5f; m.d [2, 1] = 233.0f; m.d [0, 2] = 0.8f; m.d [1, 2] = 16.2f; m.d [2, 2] = 189.0f; m.d [0, 3] = 2.3f; m.d [1, 3] = 11.7f; m.d [2, 3] = 139.0f; m.d [0, 4] = 1.7f; m.d [1, 4] = 17.9f; m.d [2, 4] = 206.0f; PCAnalyzer pca = new PCAnalyzer (m.Covariance (m.Mean ())); pca.PcaTest (); int i = -1; double[] data = { 0.2, 14.5, 166.0 }; PCAnalyzer ana = new PCAnalyzer (); ana.AddEntry (i--, data); data = new double[] { 1.5, 20.5, 233.0 }; ana.AddEntry (i--, data); data = new double[] { 0.8, 16.2, 189.0 }; ana.AddEntry (i--, data); data = new double[] { 2.3, 11.7, 139.0 }; ana.AddEntry (i--, data); data = new double[] { 1.7, 17.9, 206.0 }; ana.AddEntry (i--, data); ana.PerformPCA (); }
/// <summary> /// Parses a Mirage.Matrix from a string. /// </summary> /// <param name="input"> /// A <see cref="System.String"/> representation of a matrix /// </param> /// <returns> /// A <see cref="Mirage.Matrix"/> /// </returns> public static Mirage.Matrix ParseMirageMatrix (string input) { string[] rows = input.Split('\n'); Mirage.Matrix m = null; try { for (int i = 0; i < rows.Length; i++) { string r = rows[i]; int start; r = r.Substring (start = (r.LastIndexOf("[") + 1), r.IndexOf("]") - start); string[] cols = r.Split(';'); if (i == 0) m = new Mirage.Matrix (rows.Length, cols.Length); for (int j = 0; j < cols.Length; j++) { m.d[i,j] = float.Parse(cols[j]); } } } catch (Exception e) { Log.Exception("NoNoise/DB - Mirage.Matrix parse exception", e); return null; } return m; }
/// <summary> /// Test method for insert/select of a Mirage.Matrix into/from the database. /// </summary> /// <returns> /// True if the matrix is still the same after inserting it into the /// database and reading it from there again. False otherwise. /// </returns> private bool DBMirageMatrixText() { Mirage.Matrix m = new Mirage.Matrix (20, 45); Random r = new Random (); for (int i = 0; i < m.rows; i++) { for (int j = 0; j < m.columns; j++) { m.d [i, j] = (float) r.NextDouble (); } } Mirage.Matrix m2 = DataParser.ParseMirageMatrix (DataParser.MirageMatrixToString (m)); if (m.rows != m2.rows || m.columns != m2.columns) { Hyena.Log.Warning ("NoNoise/Testing - mirage matrices don't have the same size"); return false; } for (int i = 0; i < m.rows; i++) { for (int j = 0; j < m.columns; j++) { if (!m.d [i, j].ToString ().Equals (m2.d [i, j].ToString ())) { // string precision Hyena.Log.WarningFormat ("NoNoise/Testing - values at pos ({0}, {1}) are not the same ({2} | {3})", i, j, m.d [i, j], m2.d [i, j]); return false; } } } return true; }