使用MATIO库写入MATLAB结构体(struct)数据的示例程序

news2025/4/9 4:37:57

使用MATIO库写入MATLAB结构体(struct)数据的示例程序

MATIO是一个用于读写MATLAB数据文件(.mat)的开源C库。下面是一个完整的示例程序,展示如何使用MATIO库创建一个包含结构体数据的MAT文件。

示例程序

#include <stdio.h>
#include <stdlib.h>
#include <matio.h>

int main() {
    // 初始化mat文件
    mat_t *matfp = Mat_CreateVer("struct_example.mat", NULL, MAT_FT_MAT5);
    if (matfp == NULL) {
        fprintf(stderr, "Error creating MAT file\n");
        return EXIT_FAILURE;
    }

    // 创建结构体字段名称
    const char *fields[] = {"name", "value", "data"};
    size_t struct_dims[2] = {1, 1}; // 1x1结构体

    // 创建结构体数组
    matvar_t *struct_array = Mat_VarCreateStruct("my_struct", 2, struct_dims, fields, 3);
    if (struct_array == NULL) {
        fprintf(stderr, "Error creating struct variable\n");
        Mat_Close(matfp);
        return EXIT_FAILURE;
    }

    // 添加第一个字段: name (字符串)
    const char *name = "example struct";
    size_t name_dims[2] = {1, strlen(name)};
    matvar_t *name_var = Mat_VarCreate(NULL, MAT_C_CHAR, MAT_T_UINT8, 2, 
                                      name_dims, (void*)name, 0);
    if (name_var == NULL) {
        fprintf(stderr, "Error creating name variable\n");
        Mat_VarFree(struct_array);
        Mat_Close(matfp);
        return EXIT_FAILURE;
    }
    Mat_VarSetStructFieldByName(struct_array, "name", 0, name_var);

    // 添加第二个字段: value (双精度浮点数)
    double value = 3.14159;
    size_t value_dims[2] = {1, 1};
    matvar_t *value_var = Mat_VarCreate(NULL, MAT_C_DOUBLE, MAT_T_DOUBLE, 2, 
                                       value_dims, &value, 0);
    if (value_var == NULL) {
        fprintf(stderr, "Error creating value variable\n");
        Mat_VarFree(struct_array);
        Mat_Close(matfp);
        return EXIT_FAILURE;
    }
    Mat_VarSetStructFieldByName(struct_array, "value", 0, value_var);

    // 添加第三个字段: data (2x3矩阵)
    double data[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
    size_t data_dims[2] = {2, 3};
    matvar_t *data_var = Mat_VarCreate(NULL, MAT_C_DOUBLE, MAT_T_DOUBLE, 2, 
                                      data_dims, data, 0);
    if (data_var == NULL) {
        fprintf(stderr, "Error creating data variable\n");
        Mat_VarFree(struct_array);
        Mat_Close(matfp);
        return EXIT_FAILURE;
    }
    Mat_VarSetStructFieldByName(struct_array, "data", 0, data_var);

    // 将结构体写入文件
    if (Mat_VarWrite(matfp, struct_array, MAT_COMPRESSION_NONE) != 0) {
        fprintf(stderr, "Error writing variable to file\n");
    }

    // 清理资源
    Mat_VarFree(struct_array);
    Mat_Close(matfp);

    printf("MAT file with struct created successfully!\n");
    return EXIT_SUCCESS;
}

编译说明

要编译此程序,你需要先安装MATIO库。在Linux系统上,可以使用以下命令安装:

sudo apt-get install libmatio-dev

然后使用gcc编译:

gcc -o mat_struct_example mat_struct_example.c -lmatio

程序说明

  1. 程序创建了一个名为"struct_example.mat"的MAT文件
  2. 文件中包含一个名为"my_struct"的结构体变量
  3. 结构体包含三个字段:
    • “name”: 字符串类型
    • “value”: 双精度标量
    • “data”: 2x3双精度矩阵

在MATLAB中验证

生成的.mat文件可以在MATLAB中加载并检查:

load('struct_example.mat');
disp(my_struct);
disp(my_struct.name);
disp(my_struct.value);
disp(my_struct.data);

注意事项

  1. 确保在程序结束时释放所有分配的资源以避免内存泄漏
  2. 检查每个MATIO函数的返回值以确保操作成功
  3. 对于大型数据,考虑使用MAT_COMPRESSION_ZLIB进行压缩
  4. 结构体可以嵌套,即结构体字段可以是另一个结构体

这个示例展示了MATIO库的基本用法,你可以根据需要扩展它来处理更复杂的数据结构。

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

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

相关文章

JVM——模型分析、回收机制

方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存 虚拟机栈&#xff1a;虚拟机栈描述的是|ava方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局…

7. 记忆(Memory)机制:让AI拥有“短期记忆”与“长期记忆”

引言&#xff1a;当AI学会"记住你" 2025年某银行智能客服因无法记住用户身份&#xff0c;每次对话都要求重复验证&#xff0c;引发大量投诉。引入LangChain 记忆系统后&#xff0c;客户满意度提升62%。本文将基于MemorySaver与FAISS本地存储&#xff0c;教你构建符合…

前后端分离下,Spring Boot 请求从发起到响应的完整执行流程

以下是前后端分离架构下&#xff0c;Spring Boot 请求从发起到响应的完整执行流程&#xff0c;结合你提出的所有问题&#xff0c;按真实执行顺序和职责链条重新整理所有核心概念、结构、关键类、数据转换点和典型代码示例&#xff1a; 一、前端发起请求&#xff08;步骤1-2&…

【文献阅读】Vision-Language Models for Vision Tasks: A Survey

发表于2024年2月 TPAMI 摘要 大多数视觉识别研究在深度神经网络&#xff08;DNN&#xff09;训练中严重依赖标注数据&#xff0c;并且通常为每个单一视觉识别任务训练一个DNN&#xff0c;这导致了一种费力且耗时的视觉识别范式。为应对这两个挑战&#xff0c;视觉语言模型&am…

spring-cloud-alibaba-nacos-config使用说明

一、核心功能与定位 Spring Cloud Alibaba Nacos Config 是 Spring Cloud Alibaba 生态中的核心组件之一&#xff0c;专为微服务架构提供动态配置管理能力。它通过整合 Nacos 的配置中心功能&#xff0c;替代传统的 Spring Cloud Config&#xff0c;提供更高效的配置集中化管理…

C# Winform 入门(9)之如何封装并调用dll

封装dll 首先创建 .Net平台 类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _09.Encapsulation_dll {public class Program{/// <summary>/// 求两个double类型的数值的和/// &l…

【嵌入式系统设计师】知识点:第2章 嵌入式系统硬件基础知识

提示:“软考通关秘籍” 专栏围绕软考展开,全面涵盖了如嵌入式系统设计师、数据库系统工程师、信息系统管理工程师等多个软考方向的知识点。从计算机体系结构、存储系统等基础知识,到程序语言概述、算法、数据库技术(包括关系数据库、非关系型数据库、SQL 语言、数据仓库等)…

Vue2_Vue.js教程

目录 一、Vue.js安装 1、独立版本 2、CDN 方法 3、npm 方法 二、Vue Al编程助手 三、Vue.js目录结构 目录解析 四、Vue.js 起步 1.如何定义数据对象和方法并渲染进页面 五、Vue.js 模板语法 插值 文本_{{}} Html_v-html 指令 属性_v-bind (数据传输工具)指令 表…

【工业场景】用YOLOv12实现饮料类别识别

饮料类别识别任务的意义在于帮助人们更快速地识别和区分不同类型的饮料&#xff0c;从而提高消费者的购物体验和满意度。对于商家而言&#xff0c;饮料类别识别可以帮助他们更好地管理库存、优化货架布局和预测销售趋势&#xff0c;从而提高运营效率和利润。此外&#xff0c;饮…

从小米汽车事故反思 LabVIEW 开发

近期&#xff0c;小米汽车的一起严重事故引发了社会各界的广泛关注。这起事故不仅让我们对智能汽车的安全性产生了深深的思考&#xff0c;也为 LabVIEW 开发领域带来了诸多值得汲取的知识与领悟。 在智能汽车领域&#xff0c;尤其是涉及到智能驾驶辅助系统时&#xff0c;安全是…

Vue3+Vite+TypeScript+Element Plus开发-04.静态菜单设计

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 文章目录 目录 系列文档目录 文章目录 前言 一、Aside设计 二、动态增加菜单 三.布局引用在Main中显示 参考文献&#xff1a; 前言 在本系列文档中&…

大数据技术发展与应用趋势分析

大数据技术发展与应用趋势分析 文章目录 大数据技术发展与应用趋势分析1. 大数据概述2 大数据技术架构2.1 数据采集层2.2 数据存储层2.3 数据处理层2.4 数据分析层 3 大数据发展趋势3.1 AI驱动的分析与自动化3.2 隐私保护分析技术3.3 混合云架构的普及3.4 数据网格架构3.5 量子…

与Linux操作系统相关的引导和服务

目录 一.Linux操作系统引导过程 1.1引导过程总览 1.2系统初始化进程 1.2.1init进程 1.2.2sysmted 1.3systemd单元类型 二.排除启动类故障 2.1MBR扇区故障 2.1.1故障原因 2.1.2故障现象 2.1.3解决办法 2.1.4模拟修复MBR扇区故障 1)添加新的硬盘 2&#xff09;进行…

STM32单片机入门学习——第16节: [6-4] PWM驱动LED呼吸灯PWM驱动舵机PWM驱动直流电机

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.05 STM32开发板学习——第16节: [6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱…

基础框架系列分享:一个通用的Excel报表生成管理框架

由于我们系统经常要生成大量的Excel报表&#xff08;Word&#xff0c;PDF报表也有&#xff0c;另行分享&#xff09;&#xff0c;最初始他们的方案是&#xff0c;设计一个表&#xff0c;和Excel完全对应&#xff0c;然后读表&#xff0c;把数据填进去&#xff0c;这显然是非常不…

Ansible(4)—— Playbook

目录 一、Ansible Playbook : 1、Play &#xff1a; 2、Playbook&#xff1a; 二、Ansible Playbook 格式&#xff1a; 1、空格&#xff1a; 2、破折号&#xff08; - &#xff09;&#xff1a; 3、Play 格式&#xff1a; 三、查找用于任务的模块&#xff1a; 1、模块…

自学-C语言-基础-数组、函数、指针、结构体和共同体、文件

这里写自定义目录标题 代码环境&#xff1a;&#xff1f;问题思考&#xff1a;一、数组二、函数三、指针四、结构体和共同体五、文件问题答案&#xff1a; 代码环境&#xff1a; Dev C &#xff1f;问题思考&#xff1a; 把上门的字母与下面相同的字母相连&#xff0c;线不能…

蓝桥云客--团队赛

2.团队赛【算法赛】 - 蓝桥云课 问题描述 蓝桥杯最近推出了一项团队赛模式&#xff0c;要求三人组队参赛&#xff0c;并规定其中一人必须担任队长。队长的资格很简单&#xff1a;其程序设计能力值必须严格大于其他两名队友程序设计能力值的总和。 小蓝、小桥和小杯正在考虑报名…

C-S模式之实现一对一聊天

天天开心&#xff01;&#xff01;&#xff01; 文章目录 一、如何实现一对一聊天&#xff1f;1. 服务器设计2. 客户端设计3. 服务端代码实现4. 客户端代码实现5. 实现说明6.实验结果 二、改进常见的服务器高并发方案1. 多线程/多进程模型2. I/O多路复用3. 异步I/O&#xff08;…

[Deep-ML]Transpose of a Matrix(矩阵的转置)

Transpose of a Matrix&#xff08;矩阵的转置&#xff09; 题目链接&#xff1a; Transpose of a Matrix&#xff08;矩阵的转置&#xff09;https://www.deep-ml.com/problems/2 题目描述&#xff1a; 难度&#xff1a; easy&#xff08;简单&#xff09;。 分类&#…