コード例 #1
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readInt64_2()
        {
            MemoryStream file   = new MemoryStream(Resources.a64);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, written by Octave 3.8.1, 2014-07-14 10:52:44 UTC",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["A64"];
            var value = node.Value as long[, ];

            long[,] expected =
            {
                { -83, -91, -92, -93,  -1,  92, -78,  42, -92,  25 },
                { -79, -60,  96, -23, -85, -44,  85,  48,  71, -17 },
                {  42,  57, -13, -39,  54, -18,   6,  23,  98,  51 },
                { -62,  63,  43,  41, -22, -38,  22, -93,  22,  34 },
                {  79,  64,  32, -73, -53,  -8,  75,  77,  23,   8 },
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #2
0
        public void matrix_test_bytes()
        {
            string localPath = Path.Combine(System.Environment.CurrentDirectory, "Assets", "mat");

            #region doc_matrix_byte
            // Let's say we would like to load different .mat files which can be found at:
            // https://github.com/accord-net/framework/blob/development/Unit%20Tests/ISynergy.Framework.Mathematics.Tests/Resources/mat/

            // Let's assume they all currently reside in a "localPath"
            // folder. So let's start by trying to load a 8-bit matrix:
            string pathInt8 = Path.Combine(localPath, "int8.mat");

            // Create a .MAT reader for the file:
            var reader = new MatReader(pathInt8);

            // The variable in the file is called "arr"
            sbyte[,] matrix = reader.Read <sbyte[, ]>("arr");

            // The arr matrix should be equal to { -128, 127 }

            // (in case he didn't know the name of the variable,
            // we would have inspected the FieldNames property:
            string[] names = reader.FieldNames; // should contain "arr"
            #endregion

            CollectionAssert.AreEqual(new sbyte[, ]
            {
                { -128, 127 },
            }, matrix);

            CollectionAssert.AreEqual(new[] { "arr" }, names);
        }
コード例 #3
0
        /// <summary>
        ///   Reads the specified file or stream into a table.
        /// </summary>
        ///
        public DataTable Read(Stream stream)
        {
            var reader = new MatReader(new BinaryReader(stream), true);
            var matrix = reader[0].GetValue <double[, ]>();

            return(matrix.ToTable());
        }
コード例 #4
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readStruct()
        {
            MemoryStream file   = new MemoryStream(Resources.simplestruct);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Thu Feb 22 01:39:50 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node = reader["structure"];

            var value1 = node["a"];
            var value2 = node["string"];

            Assert.AreEqual("a", value1.Name);
            var a = value1.Value as byte[, ];

            byte[,] expected =
            {
                { 1, 2, 3 },
                { 4, 5, 6 },
            };

            Assert.IsTrue(expected.IsEqual(a));

            Assert.AreEqual("string", value2.Name);
            var s = value2.Value as string;

            Assert.AreEqual("ala ma kota", s);
        }
コード例 #5
0
 public DataReader()
 {
     using (MatReader reader = new MatReader(File.OpenRead(_matlabFile)))
     {
         _trainingArray   = reader["data"]["trainData"].Value as int[, ];
         _validationArray = reader["data"]["validData"].Value as int[, ];
         _testArray       = reader["data"]["testData"].Value as int[, ];
     }
 }
コード例 #6
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void ConstructorTest()
        {
            MemoryStream file = new MemoryStream(Resources.simplestruct);

            // Create a new MAT file reader
            var reader = new MatReader(file);

            // Extract some basic information about the file:
            string description = reader.Description; // "MATLAB 5.0 MAT-file, Platform: PCWIN"
            int    version     = reader.Version;     // 256
            bool   bigEndian   = reader.BigEndian;   // false


            // Enumerate the fields in the file
            foreach (var field in reader.Fields)
            {
                Console.WriteLine(field.Key); // "structure"
            }
            // We have the single following field
            var structure = reader["structure"];

            // Enumerate the fields in the structure
            foreach (var field in structure.Fields)
            {
                Console.WriteLine(field.Key); // "a", "string"
            }
            // Check the type for the field "a"
            var aType = structure["a"].ValueType; // byte[,]

            // Retrieve the field "a" from the file
            var a = structure["a"].GetValue <byte[, ]>();

            // We can also do directly if we know the type in advance
            var s = reader["structure"]["string"].GetValue <string>();


            Assert.AreEqual(typeof(byte[, ]), aType);
            Assert.AreEqual(typeof(string), reader["structure"]["string"].ValueType);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Thu Feb 22 01:39:50 2007",
                reader.Description);
            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            byte[,] expected =
            {
                { 1, 2, 3 },
                { 4, 5, 6 },
            };

            Assert.IsTrue(expected.IsEqual(a));
            Assert.AreEqual("ala ma kota", s);
        }
コード例 #7
0
    public FigureDataStructList(string _path)
    {
        DataStructList = new List <FigureDataStruct>();
        MatReader inputMatReader = new MatReader(_path);
        MatNode   inputMatNode   = inputMatReader.Fields[inputMatReader.FieldNames[0]];

        foreach (var field in inputMatNode.Fields)
        {
            MatNode _struct = inputMatNode.Fields[field.Key];
            DataStructList.Add(new FigureDataStruct(_struct));    // read all variables in this node and add to list
        }
    }
        private void loadFromMATFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Stream         myStream        = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.Filter           = "MAT files (*.mat)|*.mat|All files (*.*)|*.*";
            openFileDialog1.FilterIndex      = 1;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            MatReader reader = new MatReader(myStream);
                            var       aType  = reader["img_bin"].GetType();
                            byte[,] bins = reader["img_bin"].GetValue <byte[, ]>();
                            //double[,] mapMatrix = Matrix.Create<double>(bins.Rows(), bins.Columns(), 0);
                            Enviroment env = new Enviroment(bins.Rows(), bins.Columns());
                            for (int i = 0; i < bins.Rows(); i++)
                            {
                                for (int j = 0; j < bins.Columns(); j++)
                                {
                                    if (bins[i, j] == 0)
                                    {
                                        env.Map.MapMatrix[i, j] = 1;
                                    }
                                    else
                                    {
                                        env.Map.MapMatrix[i, j] = 0;
                                    }
                                }
                            }

                            this.enviroment = env;
                            propertyGridEnviroment.SelectedObject = enviroment;
                            updateUI();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
コード例 #9
0
    public void UpdateMatlabFigure()
    {
        DestroyAllChildren();
        SliderCanvas.SetActive(false);

        MatReader matFileReader = new MatReader(Application.streamingAssetsPath + Path.DirectorySeparatorChar + fileSelectionDropDown.Text);

        MatNode matFile = matFileReader.Fields[matFileReader.FieldNames[0]];

        foreach (var field in matFile.Fields)
        {
            MatNode _struct = matFile.Fields[field.Key];
            int[,] _type = _struct.Fields["type"].GetValue <int[, ]>();

            switch (_type[0, 0])
            {
            case 1:     // type 1 = FV triangulated mesh
                FVmeshVertexColor(_struct);
                break;

            case 2:
                // type 2 = 3D scatter
                scatter3(_struct);
                break;

            case 3:
                // multiple vertex color mesh
                FVmeshMultiVertColor(_struct);
                break;

            case 4:
                // inset graph;
                drawGraph(_struct);
                break;

            // should add options for multigraph
            case 5:
                // single color mesh
                FVmeshSingleColor(_struct);
                break;

            case 6:
                // set camera distance
                CamDistSetter(_struct);
                break;
            }
        }
    }
コード例 #10
0
        static void Main(string[] args)
        {
            var reader = new MatReader(@"D:\Учеба\4 курс\Нейроматематика\LAB3\данные к задачам\mnist\data.mat");
            var names  = reader.Fields.Keys;

            foreach (var name in names)
            {
                Console.WriteLine(name);
            }

            var t = reader.Read <byte[, ]>("y");

            t[0, 0] = 0;
            for (int i = 0; i < 5000; i += 500)
            {
                Console.WriteLine(t[i, 0]);
            }

            Console.ReadKey();
        }
コード例 #11
0
    public void UpdateMatlabFigure()
    {
        string    _path         = Application.streamingAssetsPath + Path.DirectorySeparatorChar + fileSelectionDropDown.Text;
        MatReader matFileReader = new MatReader(_path);

        MatNode matFile = matFileReader.Fields[matFileReader.FieldNames[0]];

        foreach (var field in matFile.Fields)
        {
            MatNode _struct = matFile.Fields[field.Key];
            // this is a bit of a silly workaround to get a string read in to be the key "_type", but using strings as keys for _matTypes is going to maake this whole script much more readable.
            // Accord throws an error if _struct is a Matlab struct with both numeric arrays and strings
            // so type is a struct with one field. The field contains no data but the FieldName is the sting I am trying to pass.
            string _type = new List <string>(_struct.Fields["type"].Fields.Keys)[0];

            MatFileReader hmm = new MatFileReader(_struct);

            _matTypes[_type](_struct);
        }
    }
コード例 #12
0
        public void matrix_test_int32()
        {
            string localPath = Path.Combine(System.Environment.CurrentDirectory, "Assets", "mat");

            #region doc_matrix_int32
            // Let's say we would like to load different .mat files which can be found at:
            // https://github.com/accord-net/framework/blob/development/Unit%20Tests/ISynergy.Framework.Mathematics.Tests/Resources/mat/

            // Let's assume they all currently reside in a "localPath"
            // folder. So let's start by trying to load a 32-bit matrix:
            string pathInt32 = Path.Combine(localPath, "int32.mat");

            // Create a .MAT reader for the file:
            var reader = new MatReader(pathInt32);

            // Let's check what is the name of the variable we need to load:
            string[] names = reader.FieldNames; // should be { "a" }

            // Ok, so we have to load the matrix called "a".

            // However, what if we didn't know the matrix type in advance?
            // In this case, we could use the non-generic version of Read:
            object unknown = reader.Read("a");

            // And we could check it's type through C#:
            Type t = unknown.GetType(); // should be typeof(int[,])

            // Now we could either cast it to the correct type or
            // use the generic version of Read<> to read it again:
            int[,] matrix = reader.Read <int[, ]>("a");

            // The a matrix should be equal to { 1, 2, 3, 4 }
            #endregion

            Assert.AreEqual(typeof(int[, ]), t);
            CollectionAssert.AreEqual(new int[, ]
            {
                { 1, 2, 3, 4 },
            }, matrix);
            CollectionAssert.AreEqual(new[] { "a" }, names);
        }
コード例 #13
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readUInt64()
        {
            MemoryStream file   = new MemoryStream(Resources.uint64);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 27 17:43:04 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["arr"];
            var value = node.Value as ulong[, ];

            System.UInt64[,] expected =
            {
                { 0, unchecked ((System.UInt64)(-1)) },
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #14
0
        public void readInt64()
        {
            var       file   = GetMat("int64.mat");
            MatReader reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 27 17:41:23 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["arr"];
            var value = node.Value as long[, ];

            System.Int64[,] expected =
            {
                { 0, -1 },
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #15
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readSingle()
        {
            MemoryStream file   = new MemoryStream(Resources.single);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 04 13:29:10 2008",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["arr"];
            var value = node.Value as float[, ];

            float[,] expected =
            {
                { 1.1f, 2.2f, 3.3f }
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #16
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readInt32()
        {
            MemoryStream file   = new MemoryStream(Resources.int32);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Tue Dec 04 11:46:17 2012",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["a"];
            var value = node.Value as int[, ];

            int[,] expected =
            {
                { 1, 2, 3, 4 },
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #17
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readLogical()
        {
            MemoryStream file   = new MemoryStream(Resources.logical);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Mon Feb 25 20:07:08 2013",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["bool"];
            var value = node.Value as byte[, ];

            byte[,] expected =
            {
                { 1, 0 },
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #18
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readInt8()
        {
            MemoryStream file   = new MemoryStream(Resources.int8);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 27 17:40:39 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["arr"];
            var value = node.Value as sbyte[, ];

            sbyte[,] expected =
            {
                { -128, 127 },
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #19
0
        private void BrowseSource()
        {
            OpenFileDialog openDialog = new OpenFileDialog();

            openDialog.Title            = "Select a Tileset";
            openDialog.InitialDirectory = this.session.LastTilesetDirectory.Value;
            openDialog.Filter           = ImageExtension.GetOpenFileImageExtensions();
            if (openDialog.ShowDialog() == true)
            {
                string tileFilePath = openDialog.FileName;
                if (File.Exists(tileFilePath))
                {
                    this.IsSourceLoaded.Value = true;
                    this.SourcePath.Value     = tileFilePath;
                    this.session.LastTilesetDirectory.Value = Directory.GetParent(tileFilePath).FullName;

                    MatReader      reader = new MatReader();
                    ResourceLoader loader = ResourceLoader.Instance;
                    Mat            toLoad = loader.Load <Mat>(tileFilePath, reader);

                    LoadItemImage(toLoad);
                }
            }
        }
コード例 #20
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readDouble2()
        {
            MemoryStream file   = new MemoryStream(Resources.matnativedouble2);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Fri Mar 02 12:35:43 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["arr"];
            var value = node.Value as double[, ];

            double[,] expected =
            {
                { 1.1, 4.4 },
                { 2.2, 5.5 },
                { 3.3, 6.6 }
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #21
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readDouble()
        {
            MemoryStream file   = new MemoryStream(Resources.matnativedouble);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Feb 21 18:57:45 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var node  = reader["arr"];
            var value = node.Value as byte[, ];

            byte[,] expected =
            {
                { 1, 4 },
                { 2, 5 },
                { 3, 6 }
            };

            Assert.IsTrue(expected.IsEqual(value));
        }
コード例 #22
0
        public void read_r_matrix(string fileName)
        {
            try
            {
                //var mzxml = new LIMPFileReader.LimpXml(fileName, (float)0, true);

                Cursor = Cursors.WaitCursor;
                var reader    = new MatReader(fileName);
                var structure = reader["data"];
                var cType     = structure["spectra"].ValueType;
                var fields    = structure.Fields;

                //var scans = (reader["result"]["scans"].GetValue<int[,]>()).ToDouble();
                var scans = reader["data"]["spectra"].GetValue <double[, ]>().Transpose();
                R_matrix.mz_array = reader["data"]["mz"].GetValue <double[, ]>().ToJagged()[0];
                mzmin             = R_matrix.mz_array[0];
                mzmax             = R_matrix.mz_array[R_matrix.mz_array.Length - 1];
                n_precision       = (int)(Math.Round(1.0 / (R_matrix.mz_array[1] - R_matrix.mz_array[0])));


                rf = new double[scans.Columns(), scans.Columns()];
                R_matrix.matrix = rf;
                rf2             = new double[rf.Columns(), rf.Rows()];

                R_matrix.scans = scans.Transpose();
                int mzlength     = scans.GetLength(0);
                var scannames    = reader["data"]["filenames"];
                var scan_of_file = (reader["data"]["scan_of_file"].GetValue <double[, ]>()).ToInt32();
                scannames_count = scan_of_file.Length;
                sampleNameList.Clear();
                sampleNameList.Add(scannames[scan_of_file[0, 0]].Value.ToString());
                sampleCoordList.Clear();
                sampleCoordList.Add(0.0);
                scanNamesList.Clear();
                int intercept = 0;
                for (int i = 0; i < scannames_count; i++)
                {
                    scanNamesList.Add(scannames[scan_of_file[0, i]].Value.ToString());
                    if (i > 0)
                    {
                        if (scannames[scan_of_file[0, i]].Value.ToString() != scannames[scan_of_file[0, i - 1]].Value.ToString())
                        {
                            sampleNameList.Add(scannames[scan_of_file[0, i]].Value.ToString());
                            sampleCoordList.Add(i);
                            intercept = i;
                        }
                    }
                    sampleScanList.Add(Convert.ToString(i + 1 - intercept));
                }
                R_matrix.scan_names = sampleScanList;
                R_matrix.file_names = sampleNameList;
                R_matrix.refresh();
                update_figure(threshold);
                Cursor = Cursors.Arrow;
            }
            catch (Exception e)
            {
                var msg = e.Message;
                Cursor = Cursors.Arrow;
                MessageBox.Show(msg, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
                return;
            }
        }
コード例 #23
0
    void cgcoords_setup()
    {
        // Create a new MAT file reader
        string path_src_cage = Path.Combine("C:/Users/vrproject/Downloads/iccm_orig/iccm_v2", "src_cage.mat");
        //var reader = new MatReader(path_src_cage);
        var reader = new MatReader(new BinaryReader(new FileStream(path_src_cage, FileMode.Open)), false, false);

        //foreach (var field in reader.Fields)
        //    Debug.Log(field.Key);
        src_cage = reader.Read <double[, ]>("Y");

        //Debug.Log(src_cage[0, 0]+" "+src_cage[1, 0]);
        //Debug.Log(src_cage.GetLength(0) + " " + src_cage.GetLength(1));
        int cage_length = src_cage.GetLength(1);

        cmplx_cage = new Complex[cage_length];
        cagem1     = new Complex[cage_length];
        A          = new Complex[cage_length];
        Ap1        = new Complex[cage_length];
        B          = new Complex[cage_length];
        Bp1        = new Complex[cage_length];
        Bm1        = new Complex[cage_length];
        logBp1B    = new Complex[cage_length];
        wrongside  = new bool[cage_length];
        badB       = new bool[cage_length];
        badBp1     = new bool[cage_length];
        logBBm1    = new Complex[cage_length];
        C          = new Complex[cage_length];

        for (int i = 0; i < cage_length; i++)
        {
            cmplx_cage[i] = new Complex(src_cage[0, i], src_cage[1, i]);
        }
        //Debug.Log(cmplx_cage[914] + " " + cmplx_cage[234]);
        //Debug.Log(cmplx_cage[775]);
        for (int i = 0; i < cage_length - 1; i++)
        {
            cagem1[i + 1] = cmplx_cage[i];
        }

        cagem1[0] = cmplx_cage[cage_length - 1];
        //Debug.Log(cagem1[775]);


        for (int i = 0; i < cage_length; i++)
        {
            A[i] = cmplx_cage[i] - cagem1[i];
        }
        //Debug.Log(A[775]);


        for (int i = 1; i < cage_length; i++)
        {
            Ap1[i - 1] = A[i];
        }

        Ap1[cage_length - 1] = A[0];
        //Debug.Log(Ap1[775]);


        path_src_cage = Path.Combine("C:/Users/vrproject/Downloads/iccm_orig/iccm_v2", "f_i.mat");
        //var reader = new MatReader(path_src_cage);
        reader = new MatReader(new BinaryReader(new FileStream(path_src_cage, FileMode.Open)), false, false);
        //foreach (var field in reader.Fields)
        //    Debug.Log(field.Key);

        double_f_i = reader.Read <double[, ]>("double_f_i");
        //Debug.Log(double_f_i[0, 0] + " " + double_f_i[1, 0]);
        //Debug.Log(double_f_i.GetLength(0)+" "+double_f_i.GetLength(1));

        f_iLength = double_f_i.GetLength(1);

        f_i = new Complex[f_iLength];
        for (int i = 0; i < f_iLength && 2 * cage_length == f_iLength; i++)
        {
            f_i[i] = new Complex(double_f_i[0, i], double_f_i[1, i]);
        }
    }
コード例 #24
0
ファイル: MatReaderTest.cs プロジェクト: zadiran/framework
        public void readCell()
        {
            MemoryStream file   = new MemoryStream(Resources.cell);
            MatReader    reader = new MatReader(file);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Thu Feb 22 03:12:25 2007",
                reader.Description);

            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            var cel = reader["cel"];

            Assert.IsNotNull(cel["xBF"]);
            Assert.IsNotNull(cel["xY"]);
            Assert.IsNotNull(cel["nscan"]);
            Assert.IsNotNull(cel["Sess"]);
            Assert.IsNotNull(cel["xX"]);

            var xBF = cel["xBF"];

            Assert.AreEqual("xBF", xBF.Name);
            Assert.AreEqual(9, xBF.Count);

            var T     = xBF["T"];
            var T0    = xBF["T0"];
            var dt    = xBF["dt"];
            var UNITS = xBF["UNITS"];
            var name  = xBF["name"];
            var order = xBF["order"];
            var bf    = xBF["bf"];

            Assert.AreEqual(16, (T.Value as byte[, ])[0, 0]);
            Assert.AreEqual(1, (T0.Value as byte[, ])[0, 0]);
            Assert.AreEqual(0.1875, (dt.Value as double[, ])[0, 0]);
            Assert.AreEqual("scans", UNITS.Value as string);
            Assert.AreEqual("hrf (with time derivative)", name.Value as string);
            Assert.AreEqual(2, (order.Value as byte[, ])[0, 0]);
            Assert.IsTrue(expectedBfValues.IsEqual(bf.Value as double[, ], 1e-15));

            var nscan = cel["nscan"];

            Assert.AreEqual(0, nscan.Count);
            Assert.AreEqual(96, (nscan.Value as byte[, ])[0, 0]);

            var xY = cel["xY"];

            Assert.AreEqual("xY", xY.Name);
            Assert.AreEqual(1, xY.Count);

            var RT = xY["RT"];

            Assert.AreEqual(3, (RT.Value as byte[, ])[0, 0]);

            var xX = cel["xX"];

            Assert.AreEqual("xX", xX.Name);
            Assert.AreEqual(6, xX.Count);

            var X     = xX["X"];
            var iH    = xX["iH"];
            var iC    = xX["iC"];
            var iB    = xX["iB"];
            var iG    = xX["iG"];
            var xname = xX["name"];

            Assert.IsTrue(expectedxXValues.IsEqual(X.Value as double[, ], 1e-15));

            Assert.AreEqual("Sn(1) test*bf(1)", xname["0"].Value);
            Assert.AreEqual("Sn(1) test*bf(2)", xname["1"].Value);
            Assert.AreEqual("Sn(1) constant", xname["2"].Value);



            var Sess = cel["Sess"];

            Assert.AreEqual(5, Sess.Count);

            var U = Sess["U"];

            Assert.AreEqual(7, U.Count);

            var Uname = U["name"];
            var Uons  = U["ons"];
            var Udur  = U["dur"];
            var Udt   = U["dt"];
            var Uu    = U["u"];
            var Upst  = U["pst"];
            var P     = U["P"];

            Assert.AreEqual("test", (Uname["0"] as MatNode).Value as string);
            Assert.AreEqual(8.00000000000000e+00, (Uons.Value as byte[, ])[0, 0]);
            Assert.AreEqual(2.40000000000000e+01, (Uons.Value as byte[, ])[1, 0]);
            Assert.AreEqual(4.00000000000000e+01, (Uons.Value as byte[, ])[2, 0]);
            Assert.AreEqual(5.60000000000000e+01, (Uons.Value as byte[, ])[3, 0]);
            Assert.AreEqual(7.20000000000000e+01, (Uons.Value as byte[, ])[4, 0]);
            Assert.AreEqual(8.80000000000000e+01, (Uons.Value as byte[, ])[5, 0]);

            for (int i = 0; i < 6; i++)
            {
                Assert.AreEqual(8, (Udur.Value as byte[, ])[i, 0]);
            }

            Assert.AreEqual(1.87500000000000e-01, (Udt.Value as double[, ])[0, 0]);

            var sparse = Uu.Value as MatSparse;

            Assert.AreEqual(774, sparse.Rows.Length);
            Assert.AreEqual(2, sparse.Columns.Length);
            Assert.AreEqual(774, sparse.Values.Length);

            int j = 0;

            for (int i = 160; i <= 288; i++, j++)
            {
                Assert.AreEqual(i - 1, sparse.Rows[j]);
            }

            for (int i = 416; i <= 544; i++, j++)
            {
                Assert.AreEqual(i - 1, sparse.Rows[j]);
            }

            for (int i = 672; i <= 800; i++, j++)
            {
                Assert.AreEqual(i - 1, sparse.Rows[j]);
            }

            for (int i = 928; i <= 1056; i++, j++)
            {
                Assert.AreEqual(i - 1, sparse.Rows[j]);
            }

            for (int i = 1184; i <= 1312; i++, j++)
            {
                Assert.AreEqual(i - 1, sparse.Rows[j]);
            }

            for (int i = 1440; i <= 1568; i++, j++)
            {
                Assert.AreEqual(i - 1, sparse.Rows[j]);
            }

            Assert.AreEqual(774, j);
            for (int i = 0; i < sparse.Values.Length; i++)
            {
                Assert.AreEqual(1.0, sparse.Values.GetValue(i));
            }

            Assert.AreEqual(2, sparse.Columns.Length);
            Assert.AreEqual(0, sparse.Columns[0]);
            Assert.AreEqual(774, sparse.Columns[1]);

            Assert.AreEqual(-21, (Upst.Value as short[, ])[0, 0]);
            Assert.AreEqual(24, (Upst.Value as short[, ])[0, 95]);


            var Pname = P["name"];
            var PP    = P["P"];
            var Ph    = P["h"];
            var Pi    = P["i"];

            Assert.AreEqual("none", Pname.Value);
            var ppv = PP.Value as ushort[, ];

            Assert.AreEqual(6, ppv.Length);
            Assert.AreEqual(2.40000000000000e+01, ppv[0, 0]);
            Assert.AreEqual(7.20000000000000e+01, ppv[1, 0]);
            Assert.AreEqual(1.20000000000000e+02, ppv[2, 0]);
            Assert.AreEqual(1.68000000000000e+02, ppv[3, 0]);
            Assert.AreEqual(2.16000000000000e+02, ppv[4, 0]);
            Assert.AreEqual(2.64000000000000e+02, ppv[5, 0]);

            Assert.AreEqual(0, (Ph.Value as byte[, ])[0, 0]);
            Assert.AreEqual(1, (Pi.Value as byte[, ])[0, 0]);

            var C = Sess["C"];

            Assert.AreEqual(2, C.Count);

            Assert.AreEqual(0, (C["C"].Value as byte[, ]).Length);
            Assert.IsNull(C["name"].Value);

            var row = Sess["row"];

            for (int i = 0; i < 96; i++)
            {
                Assert.AreEqual(i + 1, (row.Value as byte[, ])[0, i]);
            }

            var col = Sess["col"];

            Assert.AreEqual(1, (col.Value as byte[, ])[0, 0]);
            Assert.AreEqual(2, (col.Value as byte[, ])[0, 1]);

            var Fc = Sess["Fc"];

            var Fci   = Fc["i"];
            var Fname = Fc["name"];

            Assert.AreEqual(1, (Fci.Value as byte[, ])[0, 0]);
            Assert.AreEqual(2, (Fci.Value as byte[, ])[0, 1]);
            Assert.AreEqual("test", Fname.Value);
        }
コード例 #25
0
        public void structure_test()
        {
            string localPath = Path.Combine(System.Environment.CurrentDirectory, "Assets", "mat");

            #region doc_structure
            // Let's say we would like to load a .mat file
            // called "simplestruct.mat". It can be found at
            // https://github.com/accord-net/framework/blob/development/Unit%20Tests/ISynergy.Framework.Mathematics.Tests/Resources/mat/simplestruct.mat

            // Let's assume it currently resides in a "localPath" folder
            string fileName = Path.Combine(localPath, "simplestruct.mat");

            // Create a .MAT reader for the file:
            var reader = new MatReader(fileName);

            // We can extract some basic information about the file:
            string description = reader.Description; // "MATLAB 5.0 MAT-file, Platform: PCWIN"
            int    version     = reader.Version;     // 256
            bool   bigEndian   = reader.BigEndian;   // false

            // Enumerate the fields in the file
            foreach (var field in reader.Fields)
            {
                Console.WriteLine(field.Key); // "structure"
            }
            // We have the single following field
            var structure = reader["structure"];

            // Enumerate the fields in the structure
            foreach (var field in structure.Fields)
            {
                Console.WriteLine(field.Key); // "a", "string"
            }
            // Check the type for the field "a"
            var aType = structure["a"].ValueType; // byte[,]

            // Retrieve the field "a" from the file
            var a = structure["a"].GetValue <byte[, ]>();

            // We can also do directly if we know the type in advance
            var s = reader["structure"]["string"].GetValue <string>();
            #endregion

            Assert.AreEqual(typeof(byte[, ]), aType);
            Assert.AreEqual(typeof(string), reader["structure"]["string"].ValueType);

            Assert.AreEqual(
                "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Thu Feb 22 01:39:50 2007",
                reader.Description);
            Assert.AreEqual(256, reader.Version);
            Assert.IsFalse(reader.BigEndian);

            byte[,] expected =
            {
                { 1, 2, 3 },
                { 4, 5, 6 },
            };

            Assert.IsTrue(expected.IsEqual(a));
            Assert.AreEqual("ala ma kota", s);
        }