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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82523.shtml
英文地址,請注明出處:http://en.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.…