C#,Matlab混合编程(01)——Mat文件格式简介及读写Mat文件的C#源程序

Matlab 软件 20GB,很大,还有卡脖子的问题。

我们可以利用其生成的 Mat 文件做更多的事。

1 Mat 文件


MAT 文件版本概述
MAT 文件是二进制 MATLAB® 文件,用于存储工作区变量。从 MAT 文件版本 4 开始,随后的几个 MAT 文件版本都支持一组增加的功能。MATLAB 版本 R2006b 和更高版本均支持所有的 MAT 文件版本。

默认情况下,所有保存操作都会创建 7 版本的 MAT 文件。唯一的例外是使用 matfile 函数创建新的 MAT 文件时。在这种情况下,默认的 MAT 文件版本是 7.3。

要确定或更改默认 MAT 文件版本,请访问 MAT 文件预设。

  • 在主页选项卡上的环境部分中,点击  预设。
  • 选择 MATLAB > 常规 > MAT 文件。

预设适用于 save 函数和保存菜单选项。

MAT 文件的最大大小由您的本机文件系统限定。

下表列出并比较了所有 MAT 文件版本。

C#,Matlab混合编程(01)——Mat文件格式简介及读写Mat文件的C#源程序_第1张图片

 以上文字与图片来自于 Matlab:

https://ww2.mathworks.cn/help/matlab/import_export/mat-file-versions.htmlhttps://ww2.mathworks.cn/help/matlab/import_export/mat-file-versions.html

2 C# 读取 Mat 文件

2.1 Reading matrices from a MATLAB file

    MATLAB Level-5 Mat Files
    The MatlabReader class provides static functions to list all matrices stored in a MAT file or stream, 
    and to read them individually as Math.NET matrices:


    using MathNet.Numerics.LinearAlgebra;
    using MathNet.Numerics.Data.Matlab;

   

    // read the first matrix as double
    Matrix m = MatlabReader.Read("collection.mat");
    // read a specific matrix named "vd":
    Matrix m = MatlabReader.Read("collection.mat", "vd");
    // we can also choose to convert to a different type:
    Matrix m = MatlabReader.Read("collection.mat");

    
    Alternatively the reader can list all matrices of a file into named data elements, 
    which can then be read into matrices individually. 
    This is useful e.g. if we need to read some of the matrices to a different type:
    List ms = MatlabReader.List("collection.mat");
    Matrix Ad = MatlabReader.Unpack(ms.Find(m => m.Name == "Ad"));
    Matrix vd = MatlabReader.Unpack(ms.Find(m => m.Name == "vd"));

2.2 准备工作

进入 管理 NuGet 程序包

C#,Matlab混合编程(01)——Mat文件格式简介及读写Mat文件的C#源程序_第2张图片

从 NuGet 安装 MathNet.Numerics 和 MathNet.Numerics.Data.Matlab

C#,Matlab混合编程(01)——Mat文件格式简介及读写Mat文件的C#源程序_第3张图片

Visual Studio 自动配置了相应的 DLL 文件。

2.3 Mat数据的使用

     读取矩阵(当然可能是数组)数据之后,怎么使用呢?

      先添加相应的 namespace

        using MathNet;
        using MathNet.Numerics;
        using MathNet.Numerics.Data;
        using MathNet.Numerics.LinearAlgebra;
        using MathNet.Numerics.Data.Matlab;

    实际读取数据的代码:

        // 读取三角形信息
        Matrix m3 = MatlabReader.Read(filename, "triangles");
        Array nod = m3.ToArray();

   效果:

3 C# 写出 Mat 文件

    Writing matrices to a MATLAB file

    MATLAB Level-5 Mat Files
    The dual to the reader above is the MatlabWriter class that can serialize matrices to a MATLAB file or stream. Like the reader, the writer can use MatlabMatrix data elements to compose packed matrices into a file. Each matrix has a name which must not contain spaces.

    var matrices = new List();
    m.Add(MatlabWriter.Pack(myFirstMatrix, "m1");
    m.Add(MatlabWriter.Pack(mySecondMatrix, "m2");
    MatlabWrier.Store("file.mat", matrices);

   

    But there are also direct routines if only a single matrix or matrices of all the same data type are to be stored in a file:

    // write a single matrix "myMatrix" and name it "m1".

    //写入单个的"myMatrix"矩阵,并命名为"m1".
    MatlabWriter.Write("file.mat", myMatrix, "m1");

    // write multiple matrices, from a list of matrices and a list of their names:

    //写入多个矩阵,注意 矩阵列表 和 名称列表
    MatlabWriter.Write("file.mat", new[] { m1, m2 }, new[] { "m1", "m2" });

    // write a dictionary of matrices:

    //写入字典矩阵,和读取的原理类似
    var dict = new Dictionary>();
    dict.Add("m1", m1);
    dict.Add("m2", m2);
    MatlabWriter.Write("file.mat", dict);

4 关于 Mat 的更多

  你可以与联高软件一起用 Mat 文件做更多的事。

你可能感兴趣的:(C#数值计算,Numerical,Recipes,matlab,数学建模,开发语言,c#,算法)