コード例 #1
0
ファイル: NoNoiseSource.cs プロジェクト: tjom/MIRPCADB
            /// <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 ();
            }
コード例 #2
0
ファイル: DataParser.cs プロジェクト: h0rm/No.Noise
        /// <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;
        }
コード例 #3
0
ファイル: NoNoiseSource.cs プロジェクト: tjom/MIRPCADB
            /// <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;
            }