目录
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 Attributes
x 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:ncols
avgs(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')
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » MATLAB中matfile用法
发表评论 取消回复