MATLAB 之 MAT 文件

news/2024/10/23 16:28:46/

这里写目录标题

  • 一、MAT 文件
    • 1. MAT 文件
    • 2. C 语言 MAT 函数
    • 3. MAT 文件的基本操作
      • 3.1 打开 MAT 文件
      • 3.2 读写 MAT 文件
      • 3.3 关闭 MAT 文件
      • 3.4 mx 函数

一、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

http://www.ppmy.cn/news/747702.html

相关文章

基于ESP32的透明电视网络相册(可网页配置WIFI)

1 小电视目前的功能有: 显示当地今天和明天的天气、温度显示年月日星期及时间循环播放128*128像素的照片通过网页切换连接不同的wifi通过网页上传功能3中的照片 小电视网络相册主要通过ESP32模组TFT显示屏分光棱镜SD卡模块三轴加速度计陀螺仪实现以上功能。其中ESP…

四菱天线怎么加强_自制四菱天线接收地面数字电视信号(图)

发信人: EuroPad (沉默作为回答), 信区: Radio 标 题: Re: 自制四菱天线接收地面数字电视信号(图) 发信站: 水木社区 (Thu Feb 13 11:02:42 2014), 站内 还可以再绕2圈... 【 在 lipingfd (海侠) 的大作中提到: 】 : 标 题: Re: 自制四菱天线接收地面数字电视信号(图) : 发信…

基于matlab使用MSER和OCR自动检测和识别文本(附源码)

一、前言 此示例演示如何使用最大稳定极值区域 (MSER) 特征检测器检测图像中包含文本的区域。 这是在非结构化场景中执行的常见任务。非结构化场景是包含未确定或随机场景的图像。例如,您可以自动检测和识别捕获的视频中的文本,…

HTML使用标签、链接完成电视剧简介

编写实例&#xff1a;使用HTML标签完成《楚乔传》网页练习 扩展&#xff1a;点击集数跳转到详细介绍 1、<h1>~<h6> 标签被用来定义 HTML 标题。<h1> 定义重要等级最高的标题。<h6> 定义重要等级最低的标题。&#xff08;数字越大字体越小&#xff09;…

python批量裁剪图片尺寸

python裁剪图片尺寸 在做esp8266小电视的时候&#xff0c;因为图片太大&#xff0c;占用的空间太多&#xff0c;所以要对图片裁剪一下&#xff0c;但是图片太多&#xff0c;就写了一个python脚本批量处理一下&#xff0c;特别简单的小程序。。 from PIL import Image import …

CCD 尺寸

CCD&#xff08;包括CMOS感光元件&#xff09;的面积是按其矩形对角线英寸长度为指标的。这和定义电视屏幕尺寸类似。一英寸是25.4毫米。1/2.0英寸、1/1.8都是指CCD 对角线有多少分之一英寸长&#xff0c;分母小的其分数值就大&#xff0c;相应感光元件面积也大。 1/2.…

CCD及CMOS尺寸计算

&#xfeff;&#xfeff; CCD及CMOS尺寸计算 CCD&#xff08;包括CMOS 感光元件&#xff09;的面积是按其矩形对角线英寸长度为指标的。这和定义电视屏幕尺寸类似。一英寸是25.4 毫米。1/2.0 英寸、1/1.8 都是指CCD对角线有多少分之一英寸长&#xff0c;分母小的其分数值就大…

ASEMI超快恢复二极管SF58资料

编辑-Z SF58参数描述 型号&#xff1a;SF58 封装&#xff1a;DO-27 特性&#xff1a;小电流、直插超快恢复二极管 电性参数&#xff1a;5A 600V 芯片材质&#xff1a;GPP 正向电流(Io)&#xff1a;5A 芯片个数&#xff1a;1 正向电压(VF)&#xff1a;1.70V 浪涌电…