C#,Matlab混合编程(01)——Mat文件格式简介及读写Mat文件的C#源程序

news2024/11/26 4:44:42

 Matlab 软件 20GB,很大,还有卡脖子的问题。

我们可以利用其生成的 Mat 文件做更多的事。

1 Mat 文件


MAT 文件版本概述
MAT 文件是二进制 MATLAB® 文件,用于存储工作区变量。从 MAT 文件版本 4 开始,随后的几个 MAT 文件版本都支持一组增加的功能。MATLAB 版本 R2006b 和更高版本均支持所有的 MAT 文件版本。

默认情况下,所有保存操作都会创建 7 版本的 MAT 文件。唯一的例外是使用 matfile 函数创建新的 MAT 文件时。在这种情况下,默认的 MAT 文件版本是 7.3。

要确定或更改默认 MAT 文件版本,请访问 MAT 文件预设。

  • 在主页选项卡上的环境部分中,点击  预设。
  • 选择 MATLAB > 常规 > MAT 文件。

预设适用于 save 函数和保存菜单选项。

MAT 文件的最大大小由您的本机文件系统限定。

下表列出并比较了所有 MAT 文件版本。

 以上文字与图片来自于 Matlab:

https://ww2.mathworks.cn/help/matlab/import_export/mat-file-versions.htmlhttps://ww2.mathworks.cn/help/matlab/import_export/mat-file-versions.html

2 C# 读取 Mat 文件

2.1 Reading matrices from a MATLAB file

    MATLAB Level-5 Mat Files
    The MatlabReader class provides static functions to list all matrices stored in a MAT file or stream, 
    and to read them individually as Math.NET matrices:


    using MathNet.Numerics.LinearAlgebra;
    using MathNet.Numerics.Data.Matlab;

   

    // read the first matrix as double
    Matrix<double> m = MatlabReader.Read<double>("collection.mat");
    // read a specific matrix named "vd":
    Matrix<double> m = MatlabReader.Read<double>("collection.mat", "vd");
    // we can also choose to convert to a different type:
    Matrix<Complex> m = MatlabReader.Read<Complex>("collection.mat");

    
    Alternatively the reader can list all matrices of a file into named data elements, 
    which can then be read into matrices individually. 
    This is useful e.g. if we need to read some of the matrices to a different type:
    List<MatlabMatrix> ms = MatlabReader.List("collection.mat");
    Matrix<double> Ad = MatlabReader.Unpack<double>(ms.Find(m => m.Name == "Ad"));
    Matrix<float> vd = MatlabReader.Unpack<float>(ms.Find(m => m.Name == "vd"));

2.2 准备工作

进入 管理 NuGet 程序包

从 NuGet 安装 MathNet.Numerics 和 MathNet.Numerics.Data.Matlab

Visual Studio 自动配置了相应的 DLL 文件。

2.3 Mat数据的使用

     读取矩阵(当然可能是数组)数据之后,怎么使用呢?

      先添加相应的 namespace

        using MathNet;
        using MathNet.Numerics;
        using MathNet.Numerics.Data;
        using MathNet.Numerics.LinearAlgebra;
        using MathNet.Numerics.Data.Matlab;

    实际读取数据的代码:

        // 读取三角形信息
        Matrix<double> m3 = MatlabReader.Read<double>(filename, "triangles");
        Array nod = m3.ToArray();

   效果:

3 C# 写出 Mat 文件

    Writing matrices to a MATLAB file

    MATLAB Level-5 Mat Files
    The dual to the reader above is the MatlabWriter class that can serialize matrices to a MATLAB file or stream. Like the reader, the writer can use MatlabMatrix data elements to compose packed matrices into a file. Each matrix has a name which must not contain spaces.

    var matrices = new List<MatlabMatrix>();
    m.Add(MatlabWriter.Pack(myFirstMatrix, "m1");
    m.Add(MatlabWriter.Pack(mySecondMatrix, "m2");
    MatlabWrier.Store("file.mat", matrices);

   

    But there are also direct routines if only a single matrix or matrices of all the same data type are to be stored in a file:

    // write a single matrix "myMatrix" and name it "m1".

    //写入单个的"myMatrix"矩阵,并命名为"m1".
    MatlabWriter.Write("file.mat", myMatrix, "m1");

    // write multiple matrices, from a list of matrices and a list of their names:

    //写入多个矩阵,注意 矩阵列表 和 名称列表
    MatlabWriter.Write("file.mat", new[] { m1, m2 }, new[] { "m1", "m2" });

    // write a dictionary of matrices:

    //写入字典矩阵,和读取的原理类似
    var dict = new Dictionary<string, Matrix<double>>();
    dict.Add("m1", m1);
    dict.Add("m2", m2);
    MatlabWriter.Write("file.mat", dict);

4 关于 Mat 的更多

  你可以与联高软件一起用 Mat 文件做更多的事。

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

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

相关文章

qtcreator-ros 安装配置

qtcreator-ros 安装配置 计划利用 QT 搭建简易的小车远程控制客户端&#xff0c;QT 系统学习有点耗时&#xff0c;借助 qtcreator-ros 可以缩短开发周期 How to Install (Users) ROS Qt5 librviz人机交互界面开发一&#xff08;配置QT环境&#xff09; 电脑中已经安装 5.10.1 …

DJ6-1/2/3 文件系统

目录 6.1 文件系统概述 6.1.1 文件、记录和数据项 6.1.2 文件类型 6.1.3 文件系统模型 6.1.4 对文件的操作 6.2 文件的逻辑结构 6.2.1 文件逻辑结构的类型 6.2.2 顺序文件&#xff08;Sequential File&#xff09; 6.2.4 索引文件&#xff08;Index File&…

英文论文(sci)解读复现【NO.12】YOLO-Tea: YOLOv5改进的茶叶病害检测模型

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

CocosCreator图片处理:截图裁剪,保存到本地,从本地加载,远端图片转base64

截图裁剪 从相机导出的renderTexture中使用readPixels读取像素数据&#xff0c;通过像素数据创建spriteFrame可以展示到界面上。 this.rt new RenderTexture(); this.rt.initialize({width: view.getVisibleSize().width,height: view.getVisibleSize().height, }) this.ca…

Three.js--》实现3d官网模型展示

目录 项目搭建 实现网页简单布局 初始化three.js基础代码 创建环境背景 加载飞船模型 实现滚轮滑动切换3D场景 设置星光流动特效 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&…

计算机常见的故障类型

文章目录 前言一、常见故障类型介绍1.硬件故障2.系统故障3.软件故障 二、故障排查思路三、Win操作系统问题1.系统基本信息2.系统资源监视器&#xff08;运行对话框输入“resmon”&#xff09;3.事件查看器&#xff08;运行对话框输入“eventvwr”&#xff09;4.任务管理器&…

使用这些方法让你的 Python 并发任务执行得更好

动动发财的小手&#xff0c;点个赞吧&#xff01; 问题 一直以来&#xff0c;Python的多线程性能因为GIL而一直没有达到预期。 所以从 3.4 版本开始&#xff0c;Python 引入了 asyncio 包&#xff0c;通过并发的方式并发执行 IO-bound 任务。经过多次迭代&#xff0c;asyncio A…

【LED子系统】八、小试牛刀

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录…

2023电工杯数学建模B题完整模型代码【原创首发】

文末获取全部资料 摘要 近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的发展和广泛应用&#xff0c;其在教育领域的潜力和影响引起了广泛关注。本研究旨在通过一项全面的问卷调查&#xff0c;探讨AI学习工具在大学生学习过程中的影响。 在本项研究中&#…

认识HTTP协议---1

hello,大家好,今天为大家带来http协议的相关知识 1.HTTP协议 &#x1f437;1.应用层协议 &#x1f437;2.HTTP协议的工作过程 2.HTTP协议格式 &#x1f437;1.认识抓包工具Fidder &#x1f437;2.学会使用fidder &#x1f437;3.协议格式总结 3.HTTP请求 &#x1f437…

常用本地事务和分布式事务解决方案模型

目录 1 DTP模型2 2PC2.1 方案简介2.2 处理流程2.2.1 阶段1&#xff1a;准备阶段2.2.2 阶段2&#xff1a;提交阶段 2.3 方案总结 3 3PC3.1 方案简介3.2 处理流程3.2.1 阶段1&#xff1a;canCommit3.2.2 阶段2&#xff1a;preCommit3.3.3 阶段3&#xff1a;do Commit 3.3 方案总结…

使用本地的chatGLM

打开终端 wsl -d Ubuntu conda activate chatglm cd cd ChatGLM-6B python3 cli_demo.py 依次输入以上命令。

随机森林Proximity实现及应用

随机森林Proximity实现及应用 1 算法1.1 随机森林Proximity简介1.2 RF-GAP1.3 实现代码 2 应用2.1 离群点(outlier)检测2.1.1 原理和实现2.1.2 实验结果 附录 项目主页&#xff1a;randomforest C implementation of random forests classification, regression, proximity and…

可以免费使用的ChatGPT保姆级教程 (New Bing)

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 最近&#xff0c;ChatGPT已经非常流行&#xff0c;但由于各种原因&#xff0c;国内用户无法直接免费使用ChatGPT的API&#xff0c;各种伟大的神也利用这…

沉浸式翻译 安装及使用

介绍一下最近非常或的沉浸式翻译工具&#xff0c;非常有助于外文阅读&#xff0c;包括网页、pdf等。可以同时显示原文和译文&#xff0c;操作简单&#xff0c;使用起来还是非常友好的。 先上链接&#xff1a;介绍 - 沉浸式翻译 如何使用 - 沉浸式翻译 1.安装 支持Edg…

仙人掌之歌——权力的游戏(2)

他是特级战斗英雄 “那个李通&#xff0c;会不会看起来好吓人呀&#xff1f;” 云冰洁有些紧张的样子&#xff0c;几乎要让陈速笑出来。 “哪有&#xff0c;一个很 nice 的人好吧。就是看起来比较严肃而已&#xff0c;我也从没看他笑过倒是。” 陈速让云冰洁看菜单&#xff0…

【极海APM32F4xx Tiny】学习笔记01-模板工程创建

本项目的使用的开发板 关于芯片使用的其他笔记 外部晶振时钟 模板工程创建/LED工程 项目仓库 https://gitcode.net/u010261063/apm32_test_part 创建模板工程的核心要素 复制官方的标准外设库复制启动文件复制cmsis文件复制相关的公共头文件如apm32f4xx_int.h 和 system_apm…

mybatis trim标签使用详解

mybatis trim标签使用详解 mybatis的trim标签一般用于去除sql语句中多余的and关键字&#xff0c;逗号&#xff0c;或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀&#xff0c;或者添加“)“等后缀&#xff0c;可用于选择性插入、更新、删除或者条件查询等操作。…

Dubbo框架

文章目录 1. 什么是Dubbo2. Dubbo架构3. SpringBoot整合Dubbo框架3.1 前期准备3.1.1 Zookeeper的安装 3.2 项目创建3.3 添加依赖3.4 定义服务接口3.5 服务端的实现3.6 消费端请求任务3.7 服务端配置文件3.8 消费端配置文件3.9 启动应用 4. Dubbo负载均衡5. Dubbo集群容错 1. 什…

第一部分-基础篇-第一章:PSTN与VOIP(上篇)

文章目录 序言引言&#xff1a;什么是VOIP和PSTN1.1 PSTN起源与发展1.1.1 最早的电话网1.1.2 人工电话交换时代1.1.3自动电话交换时代1.1.4半电子交换机时代1.1.5空分交换机时代1.1.6 数字交换机时代1.1.7现代PSTN时代1.1.8 下一代网络及VoIP时代 1.2 电话实现技术1.2.1 电话号…