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 文件版本。
以上文字与图片来自于 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<double> m = MatlabReader.Read<double>("collection.mat");
// read a specific matrix named "vd":
Matrix<double> m = MatlabReader.Read<double>("collection.mat", "vd");
// we can also choose to convert to a different type:
Matrix<Complex> m = MatlabReader.Read<Complex>("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<MatlabMatrix> ms = MatlabReader.List("collection.mat");
Matrix<double> Ad = MatlabReader.Unpack<double>(ms.Find(m => m.Name == "Ad"));
Matrix<float> vd = MatlabReader.Unpack<float>(ms.Find(m => m.Name == "vd"));
2.2 准备工作
进入 管理 NuGet 程序包
从 NuGet 安装 MathNet.Numerics 和 MathNet.Numerics.Data.Matlab
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<double> m3 = MatlabReader.Read<double>(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<MatlabMatrix>();
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<string, Matrix<double>>();
dict.Add("m1", m1);
dict.Add("m2", m2);
MatlabWriter.Write("file.mat", dict);
4 关于 Mat 的更多
你可以与联高软件一起用 Mat 文件做更多的事。