当前位置: 首页 > news >正文

MATLAB中matfile用法

目录

语法

说明

示例

创建 MAT 文件对象

启用对 MAT 文件的写访问权限

加载整个变量

将整个变量保存至现有 MAT 文件

加载和保存部分变量

确定变量大小

参数说明

局限性

提示


        matfile的功能是访问和更改 MAT 文件中的变量,而不必将文件加载到内存中。

语法

matObj = matfile(filename)
matObj = matfile(filename,'Writable',isWritable)

说明

        matObj = matfile(filename) 创建 matlab.io.MatFile 对象,该对象连接到 filename 指定的 MAT 文件。

        该 MAT 文件对象允许您直接访问和更改 MAT 文件中的变量,而不必将变量加载到内存中

        matObj = matfile(filename,'Writable',isWritable) 启用或禁用对文件的写访问权限。将 isWritable 指定为 true 或 false。

        使用 MAT 文件对象来访问和更改 MAT 文件中的变量,而不必将文件加载到内存中。您可以加载或保存部分变量。与 load 和 save 命令相比,使用 MAT 文件对象部分加载和保存变量所需的内存较少。

示例

创建 MAT 文件对象

        为文件创建 MAT 文件对象。matfile 函数构造一个与 MAT 文件对应的 matlab.io.MatFile 对象。

matObj = matfile('myFile.mat')

启用对 MAT 文件的写访问权限

        创建对象时,启用对 MAT 文件 myFile.mat 的写访问权限。

m = matfile('myFile.mat','Writable',true);

        也可以在创建 MAT 文件对象后通过设置 Writable 属性启用写访问权限。

m.Properties.Writable = true;

加载整个变量

        打开示例 MAT 文件 topography.mat。使用 MAT 文件对象从文件中读取变量 topo。MATLAB® 将整个变量 topo 加载到工作区中。

m = matfile('topography.mat');
topo = m.topo;

将整个变量保存至现有 MAT 文件

        创建包含一个数组的 MAT 文件,然后使用 MAT 文件对象向该文件中添加另一个数组。

        通过生成 20×20 数组 x 并将其保存到 myFile.mat 来创建一个 MAT 文件。

x = magic(20);
save('myFile.mat','x');

        创建 MAT 文件对象,该对象连接到现有的 MAT 文件。通过将 Writable 设置为 true 启用写访问权限。

m = matfile('myFile.mat','Writable',true);

        再生成一个 15×15 数组 y。使用 MAT 文件对象将 y 保存到 MAT 文件。使用圆点表示法(与访问结构体数组的字段类似)指定 MAT 文件中的变量。MATLAB® 向该文件添加名为 y 的变量。

y = magic(15);
m.y = y;

        显示 MAT 文件 myFile.mat 中存储的所有变量。

whos('-file','myFile.mat')Name       Size            Bytes  Class     Attributesx         20x20             3200  double              y         15x15             1800  double      

加载和保存部分变量

        使用 MAT 文件对象访问 MAT 文件中变量的特定部分。例如,您可以将数据保存到 MAT 文件中变量的子集,或将变量的子集读入 MATLAB® 工作区中。

        使用 MAT 文件对象将数据保存到文件 myFile2.mat 中的变量 y 的子集。首先,创建 MAT 文件对象 m。

m = matfile('myFile2.mat');

        下一步,创建一个数组并将其保存到变量 y 的一部分。使用圆点表示法(与访问结构体数组的字段类似)指定 MAT 文件中的变量。MATLAB® 将 20×20 数组插入由索引 (81:100,81:100) 指定的 y 的元素中。

m.y(81:100,81:100) = magic(20);

        将数组 y 的子集读取到新的工作区变量 z 中。MATLAB® 将 MAT 文件中由索引 (85:94,85:94) 指定的 10×10 子数组读取到工作区变量 z 中。

z = m.y(85:94,85:94);

确定变量大小

        确定变量的大小,然后计算各列的均值。打开示例 MAT 文件 stocks.mat。

filename = 'stocks.mat';
m = matfile(filename);

确定 stocks.mat 中变量 stocks 的大小。

[nrows,ncols] = size(m,'stocks');

        计算变量 stocks 中各列的均值。

avgs = zeros(1,ncols);
for i = 1:ncolsavgs(i) = mean(m.stocks(:,i));
end

参数说明

filename — MAT 文件的名称

MAT 文件的名称,指定为字符向量或字符串标量。

  • filename 可以包含完整路径或部分路径,否则 matfile 会在 MATLAB® 搜索路径中搜索文件。

  • 如果 filename 不包含扩展名,则 matfile 将追加 .mat。

  • 如果文件不存在,matfile 将会在首次对变量赋值时创建一个 7.3 版本的 MAT 文件。

isWritable — 启用写访问权限

        启用写访问权限,指定为 true 或 false。对于新建文件,默认值为 true;对于现有文件,默认值为 false。

  • ​true - 启用 MAT 文件对象对 MAT 文件的写访问权限。如果文件是只读的,请使用 fileattrib 函数更改系统权限。

  • false - 禁用 MAT 文件对象对 MAT 文件的写访问权限。

访问 MAT 文件对象属性

        使用语法 ObjectName.Properties.PropertyName 访问 MAT 文件对象属性,其中 PropertyName 是属性的名称。例如,可以使用语法 mObj.Properties.Source 访问连接到 MAT 文件对象 mObj 的 MAT 文件的源文件路径。

Source — 文件路径

        文件路径,以字符向量形式返回,其中包含 MAT 文件的完全限定路径。

Writable — 写访问权限状态

        MAT 文件对象的写访问权限状态,以 true 或 false 形式返回。

  • true - MAT 文件对象对 MAT 文件具有写访问权限。

  • false - MAT 文件对象对 MAT 文件具有只读访问权限。

局限性

  • 通过索引访问 MAT 文件中的部分变量时:

    • 不支持线性索引。必须指定所有维度的索引。

    • 不支持将复数值赋给实数数组的索引部分。

  • 对于 MAT 文件中的稀疏数组,MAT 文件对象:

    • 支持通过索引读取稀疏数组的子集。

    • 不支持通过索引对稀疏数组的子集写入(赋值)。

  • MAT 文件对象不支持对以下项目进行索引:

    • 表变量

    • 元胞数组的元胞

    • 字符串数组

    • 日期时间数组

    • 结构体数组字段

    • 用户定义的类

  • MAT 文件对象不支持使用 m 输出计算函数句柄。例如,如果 MAT 文件包含函数句柄 myfunc,则语法 m.myfunc() 将会尝试对该函数句柄进行索引,并且不会调用函数。

  • 在保存句柄对象时,MATLAB 保存对象的副本,而不是句柄的副本。因此,通过在保存对象的工作区中的对象句柄修改对象不会修改保存的句柄对象。

提示

  • 有效的部分加载和保存要求 7.3 版本 MAT 文件。要创建 7.3 版本 MAT 文件,请使用 '-v7.3' 选项调用 save 函数。例如,要将现有的名为 durer.mat 的 MAT 文件转换为 7.3 版本,请调用:

    load('durer.mat');
    save('mycopy_durer.mat','-v7.3');
  • 如果在索引中使用 end 关键字,则 MATLAB 会将整个变量都加载到内存中。对于非常大的变量,此加载操作将引发 Out of Memory 错误。请不要使用 end,而是使用 size 方法来确定变量的范围:

    sizeMyVar = size(matObj,'myVar')

http://www.lryc.cn/news/405674.html

相关文章:

  • Spring之Spring Bean的生命周期
  • OSINT 开源情报中的地理定位方法
  • Java面试题系列 - 第17天
  • 开发环境搭建
  • 【NLP】关于参数do_sample的解释
  • Vbox虚拟机+Ubuntu motest测试drm
  • ArcGIS Pro SDK (九)几何 15 转换
  • Spring IOC DI --- 认识IOC DI
  • 常用的python程序汇总——入门级
  • 被问到MQ消息已丢失,该如何处理?
  • open3d:ransac分割多个平面(源码)
  • Github 2024-07-17 开源项目日报 Top10
  • vue3中Composition API写法 <script setup>标签中哪些可以不用导入即可使用?
  • Facebook Dating:社交平台的约会新体验
  • 【系统架构设计 每日一问】五 搜索型业务,采用MySQL+ES,如何保证数据一致性
  • 缓存穿透,缓存击穿,缓存雪崩
  • 运维 | 清理 Linux 磁盘空间方法汇总
  • googleTest 源码主线框架性分析——TDD 01
  • Python:对常见报错导致的崩溃的处理
  • linux系统进程占cpu 100%解决步骤
  • 数据传输安全--IPSEC
  • Unity XR Interaction Toolkit的安装(二)
  • 什么是PCB流锡槽焊盘/C型焊盘,如何设计?-捷配笔记
  • 电缆故障精准定位系统
  • Google Chrome 浏览器在链接上点右键的快捷键
  • Redis在SpringBoot中遇到的问题:预热,雪崩,击穿,穿透
  • Pytorch 6
  • iterator(迭代器模式)
  • 使用Web控制端和轻量级客户端构建的开放Web应用防火墙(OpenWAF)
  • 设计模式在FileBrowser中的几个应用