matIo库及.mat数据格式介绍

一.概述

1..mat数据格式

(1).mat 是 MATLAB 软件的标准二进制数据存储格式,用于保存变量、矩阵、数组、结构体等数据类型。其名称源于 “MATLAB Data” 的缩写,最初设计为高效存储和加载 MATLAB 环境中的数据,后来逐渐成为科学计算、工程分析等领域的通用数据格式之一。

(2).mat 格式的发展与版本演变

a.早期版本(.mat v4, v5)

v4 格式(MATLAB 4.0 之前):仅支持基本数据类型,采用 ASCII 或二进制存储,结构简单但功能有限。

v5 格式(MATLAB 5.0+,1997 年推出):引入二进制存储标准,支持更复杂的数据类型(如细胞数组、对象),并采用分层结构存储数据。

b.HDF5 格式(.mat v7.3 及以上,2006 年推出)

从 MATLAB 7.3(R2006b)开始,.mat 文件基于 HDF5(Hierarchical Data Format 5) 标准构建,支持存储超过 2GB 的大数据集,兼容性和稳定性显著提升。

(3).mat 文件的核心结构

a.数据组织方式

.mat 文件以键值对(Key-Value) 形式存储数据,每个变量对应一个唯一的名称(Key)和数据内容(Value)。

数据以分层结构组织,支持嵌套结构体(Struct)、细胞数组(Cell Array)等复杂数据类型。

b.HDF5 格式的技术特点

分层存储:类似文件系统的目录结构,可存储多维数组、元数据、属性等。

压缩与分块:支持数据压缩(如 gzip)和分块存储,优化大数据集的读写效率。

跨平台兼容性:HDF5 是国际通用标准,可在不同操作系统和软件间共享数据。

(4)LMS Test.Lab 软件也支持.mat导入文件。

2.matIo库介绍

  a.matIo 是一个用于读写 MATLAB .mat 文件的开源 C 语言库,旨在为非 MATLAB 环境提供高效、灵活的 .mat 文件处理能力。它支持读取和写入多种版本的 .mat 文件(包括 v4、v5 和基于 HDF5 的 v7.3 格式),使开发者能够在 C/C++、Python、R 等语言中直接操作 .mat 数据,无需依赖 MATLAB 环境。

b.网址:https://github.com/tbeu/matio  

  C.编译:用qt工程直接打开zlib和matio工程中的CmakeList.txt文件即可直接编译。

二..mat库读写

1.使用matIo库读写.mat文件

QT代码示例:

#include <QCoreApplication>

#include <matio.h>

#include <QDebug>

void readMatFile(const QString &filename) {

    mat_t *mat = Mat_Open(filename.toLocal8Bit().data(), MAT_ACC_RDONLY);

    if (!mat) {

        qWarning() << "无法打开文件:" << filename;

        return;

    }

    matvar_t *var;

    while ((var = Mat_VarReadNextInfo(mat)) != nullptr) {

        qDebug() << "找到变量:" << var->name << "类型:" << var->class_type;

        if (var->class_type == MAT_C_DOUBLE && var->data_type == MAT_T_DOUBLE) {

            double *data = static_cast<double*>(var->data);

            qDebug() << "数据维度:" << var->dims[0] << "x" << var->dims[1];

            qDebug() << "示例数据:" << data[0] << data[1];

        }

        Mat_VarFree(var);

    }

    Mat_Close(mat);

}

void writeMatFile(const QString &filename) {

    mat_t *mat = Mat_CreateVer(filename.toLocal8Bit().data(), nullptr, MAT_FT_MAT5);

    if (!mat) {

        qWarning() << "创建文件失败";

        return;

    }

    // 创建double矩阵

    double data[] = {1.0, 2.0, 3.0, 4.0};

    size_t dims[2] = {2, 2};

    matvar_t *matvar = Mat_VarCreate(

        "matrix", MAT_C_DOUBLE, MAT_T_DOUBLE,

        2, dims, data, MAT_F_DONT_COPY_DATA

    );

    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);

    Mat_VarFree(matvar);

    // 创建字符串

    const char *str = "Hello from Qt6";

    matvar = Mat_VarCreate(

        "message", MAT_C_CHAR, MAT_T_UTF8,

        1, new size_t[1]{strlen(str)}, (void*)str, 0

    );

    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);

    Mat_VarFree(matvar);

    Mat_Close(mat);

}

int main(int argc, char *argv[]) {

    QCoreApplication a(argc, argv);

    const QString filename = "demo.mat";

    // 写入示例

    writeMatFile(filename);

    qDebug() << "文件写入完成";

    // 读取示例

    qDebug() << "\n读取文件内容:";

    readMatFile(filename);

    return 0;

}

2.python读写.mat文件

需要使用 scipy.io 库(需提前安装 scipy):

python代码:

import scipy.io as sio

# 读取 .mat 文件

mat_data = sio.loadmat('data.mat')

# 保存为 .mat 文件

sio.savemat('output.mat', {'variable': data_array})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业级调度器LVS (面试版)

1. 什么是 LVS?有什么作⽤? LVS ( Linux Virtual Server )是⼀个基于 Linux 内核实现的⾼性能、可扩展和可靠的负载均衡。它将多个服务器组成⼀个⾼可⽤、⾼性能和⾼可靠的虚拟服务器集群,通过将客户端的请求转发到不同的后端服务器,实现负载均衡和⾼可⽤性。 2.什么是 …

用python制作一个简易的聊天室软件

文章目录 效果图python源码使用说明效果图 只需要一百多行的python代码,就能制作一个简易的聊天室软件。效果如下: 操作说明: 1、先运行server.py启动服务器; 2、每运行一次client.py可以创建一个聊天用户(需要输入用户昵称); 3、输入对方的昵称即可与其聊天,输入“a…

Android13 开机时间优化

前言 在实际应用场景中&#xff0c;特定领域对 Android 系统的启动时间有着极为严苛的要求&#xff0c;车载领域便是典型代表。想象一下&#xff0c;当车辆已经行驶出数公里之遥&#xff0c;车内的信息娱乐系统&#xff08;IVI&#xff09;却仍未完成启动&#xff0c;这无疑会…

08SpringBoot高级--自动化配置

目录 Spring Boot Starter 依赖管理解释 一、核心概念 二、工作原理 依赖传递&#xff1a; 自动配置&#xff1a; 版本管理&#xff1a; 三、核心流程 四、常用 Starter 示例 五、自定义 Starter 步骤 创建配置类&#xff1a; 配置属性&#xff1a; 注册自动配置&a…

基于cornerstone3D的dicom影像浏览器 第二十四章 显示方位、坐标系、vr轮廓线

系列文章目录 文章目录 系列文章目录前言一、工具栏修改二、切片窗口显示方位文字1. 修改mprvr.js&#xff0c;添加函数getOrientationMarkers2. 修改DisplayerArea3D.vue 三、vr窗口显示坐标系1. 修改mprvr.js 添加OrientationMarkerTool2. view3d.vue中响应工具栏事件3. 修改…

【C/C++】线程局部存储:原理与应用详解

文章目录 1 基础概念1.1 定义1.2 初始化规则1.3 全局TLS vs 局部静态TLS 2 内存布局2.1 实现机制2.2 典型内存结构2.3 性能特点 3 使用场景/用途3.1 场景3.2 用途 4 注意事项5 对比其他技术6 示例代码7 建议7.1 调试7.2 优化 8 学习资料9 总结 在 C 多线程编程中&#xff0c;线…

【图像大模型】IP-Adapter:图像提示适配器的技术解析与实践指南

IP-Adapter&#xff1a;图像提示适配器的技术解析与实践指南 一、项目背景与技术价值1.1 图像生成中的个性化控制需求1.2 IP-Adapter的核心贡献 二、技术原理深度解析2.1 整体架构设计2.2 图像特征编码器2.3 训练策略 三、项目部署与实战指南3.1 环境配置3.2 模型下载3.3 基础生…

MySQL-5.7 修改密码和连接访问权限

一、MySQL-5.7 修改密码和连接权限设置 修改密码语法 注意&#xff1a;rootlocalhost 和 root192.168.56.% 是两个不同的用户。在修改密码时&#xff0c;两个用户的密码是各自分别保存&#xff0c;如果两个用户密码设置不一样则登陆时注意登陆密码 GRANT ALL PRIVILEGES ON …

Linux基本指令篇 —— touch指令

touch是Linux和Unix系统中一个非常基础但实用的命令&#xff0c;主要用于操作文件的时间戳和创建空文件。下面我将详细介绍这个命令的用法和功能。 目录 一、基本功能 1. 创建空文件 2. 同时创建多个文件 3. 创建带有空格的文件名&#xff08;需要使用引号&#xff09; 二、…

mysql explain使用

文章目录 type 访问类型性能高到低多注意type: index 出现的场景 key 实际使用的索引Extra 额外信息其他字段 通过 EXPLAIN 你可以知道&#xff1a;如是否使用索引、扫描多少行、是否需要排序或临时表 EXPLAIN 三板斧&#xff08;type、key、Extra&#xff09; 例子&#xff1…

JMeter-SSE响应数据自动化

结构图 背景&#xff1a; 需要写一个JMeter脚本来进行自动化测试&#xff0c;主要是通过接口调用一些东西&#xff0c;同时要对响应的数据进行处理&#xff0c;包括不限于错误信息的输出。 1.SSE(摘录) SSE&#xff08;Server-Sent Events&#xff09;是一种基于HTTP协议、允许…

<<运算符重载 和 c_str() 的区别和联系

例题 文章开始之前我们看下以下代码&#xff0c;你能精准的说出正确的输出结果并知道其原理吗&#xff1f; void test() {string s1("hello world");cout << s1 << endl;//cout << s1.c_str() << endl;//const char* p1 "xxxx"…

python web flask专题-Flask入门指南:从安装到核心功能详解

Flask入门指南&#xff1a;从安装到核心功能详解 Flask作为Python最流行的轻量级Web框架之一&#xff0c;以其简洁灵活的特性广受开发者喜爱。本文将带你从零开始学习Flask&#xff0c;涵盖安装配置、项目结构、应用实例、路由系统以及请求响应处理等核心知识点。 1. Flask安…

一种C# 的SM4 的 加解密的实现,一般用于医疗或者支付

一种C# 的SM4 的 加解密的实现 一般用于医疗或者支付 加密 string cipherText SM4Helper.Encrypt_test(data, key); public static string Encrypt_test(string plainText, string key) { byte[] keyBytes Encoding.ASCII.GetBytes(key); byte[] input…

“轩辕杯“云盾砺剑CTF挑战赛 Web wp

文章目录 ezflaskezjsezrceezssrf1.0签到ezsql1.0ez_web1非预期预期解 ezflask ssti, 过滤了一些关键词, 绕一下就行 name{{url_for["__globals__"]["__builtins__"]["eval"]("__tropmi__"[::-1])(os)["po""pen"…

Matlab快速上手五十六:详解符号运算里假设的用法,通过假设可以设置符号变量的取值范围,也可以通过假设设置变量属于集合:整数、正数和实数等

1.符号变量中假设的概念 在符号数学工具箱中&#xff0c;符号变量默认范围是全体复数&#xff0c;也就是说&#xff0c;符号运算是在全体复数域进行的&#xff0c;若需要运算中&#xff0c;不使用全体复数域&#xff0c;可以为变量设定取值范围&#xff0c;这就用到了假设&…

【python实用小脚本-79】[HR转型]Excel难民到数据工程师|用Python实现CSV秒转JSON(附HRIS系统对接方案)

场景故事&#xff1a;从手动复制粘贴到自动化数据流转 "Kelly&#xff0c;我们需要把3000名员工的考勤数据导入新HR系统&#xff0c;今天能完成吗&#xff1f;"去年这个时候&#xff0c;作为HRIS项目负责人的我&#xff0c;面对这个需求时第一反应是打开Excel开始手…

数据透视:水安 B 证如何影响水利企业的生存指数?

某大数据公司提取了 3000 家水利企业的经营数据&#xff0c;一组关联分析令人震惊&#xff1a;B 证配备率与企业利润率的相关系数达 0.67—— 这意味着持证率每提升 10%&#xff0c;企业利润率平均提高 4.2 个百分点。当我们用数据解剖这本红本本&#xff0c;会发现它像一根无形…

从零搭建上门做饭平台:高并发订单系统设计

你知道为什么聪明人都在抢着做上门做饭平台吗&#xff1f;因为这可能是餐饮行业最后一片蓝海&#xff01;传统餐饮还在为房租人工发愁时&#xff0c;上门私厨已经轻装上阵杀出重围。不需要门店租金&#xff0c;不用养服务员&#xff0c;厨师直接上门服务&#xff0c;成本直降60…

openpi π₀ 项目部署运行逻辑(四)——机器人主控程序 main.py — aloha_real

π₀ 机器人主控脚本都在 examples 中&#xff1a; 可以看到包含了多种类机器人适配 此笔记首先记录了 aloha_real 部分 aloha_real 中&#xff0c;main.py 是 openpi ALOHA 平台上“主控执行入口”&#xff0c;负责&#xff1a; 建立与推理服务器&#xff08;serve_policy.…