MATLAB 之 MAT 文件

这篇具有很好参考价值的文章主要介绍了MATLAB 之 MAT 文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、MAT 文件

  • MAT 文件是 MATLAB 数据存储的默认文件格式,以双精度二进制格式保存数据。
  • MAT 文件为其他程序设计语言(如 C、C++、FORTRAN 等)使用 MATLAB 数据提供了一种共享机制。

1. MAT 文件

  • MAT 文件由 128 字节的 MAT 文件头和尾随其后的数据单元组成。
  • 文件头包括 MATLAB 版本、文件被创建的时间等信息。
  • 数据单元分为标志和数据两个部分,标志占 8 字节,包含数据类型、数据大小等信息。如果标志中的数据字节数小于 4,那么,MATLAB 使用压缩格式存储单元中的数据。
  • MATLAB 的 save 命令可以将 MATLAB 系统内部数据保存为 MAT 文件,而 load 命令可以将磁盘上的 MAT 文件中的数据读入到 MATLAB 系统中。
  • 此外,为了有效地管理 MAT 文件,以及在 MATLAB 外部读取和创建 MAT 文件,MATLAB 提供了一一个子程序库,用户可以在 C、C++、FORTRAN 程序中直接调用这些子程序来创建和读取 MAT 文件。
  • MATLAB 提供的用于操作 MAT 文件的 API 函数封装于两个标准库文件中:libmat.liblibmx.lib。前者用于对 MAT 文件的操作,后者用于对 MAT 文件中矩阵的操作。

2. C 语言 MAT 函数

  • C 语言 MAT 函数用于在 C 程序中对 MAT 文件进行操作。C 语言 MAT 函数及功能详细如下表所示。
MAT 函数 函数功能
matOpen 打开 MAT 文件
matClose 关闭 MAT 文件
matGetDir 获取 MAT 文件中的矩阵列表
matGetV ariable 从 MAT 文件中读取一个矩阵
matPutV ariable 向 MAT 文件写入一个矩阵
matGetNextV ariable 从 MAT 文件中读取下一个矩阵
matDeleteV ariable 从 MAT 文件中删除-个矩阵
matPutVariableAsGlobal 向 MAT 文件写入一个矩阵,当后续从文件读取该矩阵时,放入全局工作区
matGetV ariableInfo 从 MAT 文件中读取数据单元的标志信息
matGetNextV ariableInfo 从 MAT 文件中读取下一个数据单元的标志信息

3. MAT 文件的基本操作

  • 下面,我们以 C 语言为例,说明 MAT文件的操作办法。
  • 在 C 程序中,通过指向 MAT 文件的指针对文件进行操作,定义指向 MAT 文件的指针的格式如下:
MATFile *mfp;
  • MAT 文件操作函数是在头文件 mat.h 中定义的,因此,C 程序开始部分要使用如下命令:
#include "mat.h"
  • MAT 文件操作分成以下 3 种。

3.1 打开 MAT 文件

  • 打开文件使用 matOpen 函数,其调用格式如下:
mfp=matopen(filename,mode)
  • 其中,mfp 是已经声明为 MAT 文件类型的指针,filename 为要操作的 MAT 文件,mode 用来说明对文件的使用方式,可取以下值。
  • (1) r:以只读方式打开文件。
  • (2) u:以可读也可写方式打开文件。
  • (3) w:以只能写的方式打开文件。如果该文件中有内容,则删除原有内容。
  • (4) wz:打开文件用于写入压缩数据。
  • 如果函数打开成功,则返回函数句柄,否则返回 NULL。

3.2 读写 MAT 文件

  • (1) 向 MAT 文件中写入一个矩阵。函数调用格式如下:
matPutVariable(mfp,name, mp)
matPutArrayAsGlobal(mfp,mp)
  • 其中,mfp 是已经定义的 MAT 文件指针,name 是写入文件的 mxArray 类型的数据在文件中的命名,mp 是指向工作区 mxArray 类型变量的指针。
  • 如果文件中存在与 name 同名的 mxArray ,那么将覆盖原来的值。
  • 如果不存在同名的 mxArray,则将此 mxArray 添加到文件末尾。
  • 函数执行成功,返回 0,否则返回一个非零值。第二个函数调用后,使得用 load 命令装入这个 MAT 文件时,该矩阵对应的变量成为全局变量。
  • (2) 获取 MAT 文件中的变量列表。函数调用格式如下:
matGetDir(mfp,num)
  • 其中,mfp 是已经定义的 MAT 文件指针,num 是指向记录文件中 mxArray 个数的系统变量的指针。
  • 函数执行成功,mfp 返回一个字符指针数组,其中的每个元素指向 MAT 文件中的一个矩阵。
  • 执行失败,mfp 返回一个空指针,num 为 -1。如果 num=0,则表示 MAT 文件中没有矩阵。
  • (3) 从 MAT 文件中读取一个矩阵。函数调用格式如下:
matGetVariable(mfp,name)
  • 其中,mfp 是已经定义的 MAT 文件指针。如果函数执行成功,在内存中创建-一个命名为 name 的 mxArray 类型的对象,并将读取的数据赋给该对象。
  • matGetDirmatGetVariable 函数通过 mxCalloc 函数分配内存,在程序结束时,必须使用 mxFree 函数释放内存。
  • (4) 从 MAT 文件中删除一个矩阵。函数调用格式如下:
matDeleteVariable(mfp,name)
  • 其中,mfp 是已经定义的 MAT 文件指针,name 为要删除的矩阵。如果函数执行成功,将返回 0,否则返回一个非零值。

3.3 关闭 MAT 文件

  • 关闭 MAT 文件使用 matClose 函数,其调用格式如下:
matClose(mfp)
  • 其中,mfp 是已经定义的 MAT 文件指针。
  • 如果函数执行成功,返回 0,否则返回 EOF。

3.4 mx 函数

  • 在 C 程序中,使用 MATLAB 数据时还用到 MATLAB 提供的接口函数中的 mx 函数,以完成对 mxArray 对象的操作。
  • MATLAB 的矩阵运算是以 mxArray 结构体(C++ 中是 mwArray 类)为核心构建的,mxArray 结构体的定义在 MATLAB 的 extern\include\matrix.h 文件中。下表所示为常用 C 语言 mx 函数及功能,其他 mx 函数的用法参见 MATLAB 帮助文件。
C 语言 mx 函数 功能
char *mxArrayToString(const mxArray *array_ ptr); 将 mxArray 结构体转变为字符串
mxArray *mxCreateDoubleMatrix(int m,int n,mxComplexity ComplexFlag); 创建二维双精度类型 mxArray 矩阵
mxArray *mxCreateString(const char *str) 创建字符串
void mxDestroyArray(mxArray *array_ ptr); 释放由 mxCreate 类函数分配的内存
int mxGetM(const mxArray *array_ ptr); 获取矩阵的行数
int mxGetN(const mxArray *array_ ptr); 获取矩阵的列数
void mxSetM(mxArray *array_ ptr,int m); 设置矩阵的行数
void mxSetN(mxArray *array_ ptr,int m); 设置矩阵的列数
double *mxGetPr(const mxArray *array_ ptr); 获取矩阵实数部分的数据指针
double *mxGetPi(const mxArray *array_ ptr); 获取矩阵虚数部分的数据指针
void mxSetPr(mxArray *array_ ptr,double *pr); 设置矩阵实数部分的数据指针
void mxSetPi(mxArray *array_ ptr,double *pr); 设置矩阵虚数部分的数据指针
void *mxCalloc(size_ t n,size_ t size); 在内存中分配 n 个大小为 size 字节的单元,并初始化为 0

文章来源地址https://www.toymoban.com/news/detail-720293.html

到了这里,关于MATLAB 之 MAT 文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab中将矩阵存储为.mat格式

    Matlab中将矩阵存储为.mat格式 在Matlab中,我们可以使用.mat格式来保存和加载矩阵数据。.mat文件是Matlab专有的二进制文件格式,它可以保存包含矩阵、向量、结构体和其他Matlab变量的数据。本文将介绍如何使用Matlab将矩阵存储为.mat格式,并展示相应的源代码。 要将矩阵保存为

    2024年02月03日
    浏览(42)
  • (Python)MATLAB mat矩阵和Python npy矩阵转换

    Python np.ndarray矩阵转换为MATLAB mat文件 Python读取MATLAB mat文件

    2024年01月16日
    浏览(41)
  • MATLAB /Simulink 快速开发STM32(使用st官方工具 STM32-MAT/TARGET),以及开发过程

    配置好环境以后就是开发: stm32cube配置芯片,打开matlab添加ioc文件,写处理逻辑,生成代码,下载到板子中去。 配置需要注意事项: STM32CUBEMAX6.5.0 + MABLAB2022B+keilV5.2 Matlab生成的代码CTRL+B 其中关键的配置有哪些,如图: untitledtest_stm32是matlab生成的代码

    2024年02月14日
    浏览(49)
  • 使用matlab中cell2mat报错:错误使用cat 要串联的数组的维度不一致

    从Excel中用readtable读取数据,因为默认每一列都是cell类型,想转成matrix类型方便使用。 在matlab官方文档搜到cell2mat函数可用于转换 但转换时报错: 错误使用 cat 要串联的数组的维度不一致 搜索后发现错误原因在于每行cell中长度不一致。 cell中的存储格式是char,用单引号表示

    2024年02月13日
    浏览(56)
  • Java 内存溢出(二)使用 MAT 分析 .hprof 内存映像文件

    .hprof 文件: 是 java 项目的 Heap Dump 文件,也叫内存映像文件、内存快照文件,可以存放一个 java 进程在某个时间点的内存快照。生成 Heap Dump 文件的方式有两种:一是使用 jmap 命令手动导出,二是启动脚本中添加 -XX:+HeapDumpOnOutOfMemoryError 参数自动导出。本文中只涉及第二种。

    2023年04月08日
    浏览(69)
  • MATLAB中num2str num2cell cell2struct mat2cell函数的基本用法

    num2str:         函数功能:  把数值转换成字符串, 转换后可以使用fprintf或disp函数进行输出。在matlab命令窗口中键入doc num2str或help num2str即可获得该函数的帮助信息。 语法格式: str = num2str(A) 把数组A中的数转换成字符串表示形式。 str = num2str(A, precision) 把数组A转换成字

    2024年02月09日
    浏览(40)
  • python读取.mat文件,python将变量存为.mat文件详细介绍

             在进行数据处理的过程中,经常会用到Matlab和python两种工具,.mat文件是Matlab数据存储的标准数据格式,通过创建一个.mat文件详细介绍两种工具之间的数据读取和存储。 例如:创建一个数组A,存到指定文件夹下 变量A:  通过save将变量A进行保存: save(\\\'具体路径\\\',\\\'变

    2024年02月07日
    浏览(38)
  • MATLAB 之 常用内部函数,运算,字符串和结构数据与单元数据

    内部函数是由 MATLAB 系统根据一般用户的需要编制并提供给用户使用的一组程序,也被称为系统函数或库函数。 MATLAB 提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量具有相同维数和大小的矩阵

    2024年02月04日
    浏览(51)
  • 算法、数据结构、计算机系统、数据库MYSQL、概率论、数学实验MATLAB、数学建模、马原、英语、杂项、QT项目

    可以三个条件 以此类推 (condition1)?x:(condition2)?y:z string变成int int 变成string 可以用循环 模运算展开式推导 我们要证明等式: (a * b) mod m = ((a mod m) * (b mod m)) mod m 假设 a = q1 * m + r1 ,其中 q1 是 a 除以 m 的商, r1 是 a 除以 m 的余数。类似地,假设 b = q2 * m + r2 ,其中

    2024年02月08日
    浏览(61)
  • c# opencv 将Mat追加到已有的npy文件

     1. NDArray 要引入 NumSharp 类库  2.  int[] trans = new int[] { 1,2,0 };    NDArray resultArray = np.transpose(appendArray, trans);   transpose是维度转换函数,默认是0 ,1,2,所以要把0放在最后

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包