方法可以直接在mat文件中保存和加载部分变量,而不必将它们加载到内存中matfile
函数。使用的主要优点是matfile
函数在负载
或保存
函数的优点是,您可以处理非常大的数据集的一部分,否则这些数据集太大,无法装入内存。在处理这些大变量时,一次向内存中读写尽可能多的数据。否则,重复的文件访问会对代码的性能产生负面影响。
matfile
函数方法加载、修改和保存现有mat文件中变量的一部分matfile
函数。
创建一个带有两个变量的7.3版本mat文件,一个
而且B
.
一个=兰德(5);B =魔法(10);保存example.mat一个B-v7.3;清晰的一个B
构造一个MatFile
对象从mat文件,example.mat
.的matfile
函数创建一个MatFile
对象,该对象对应于mat文件,并包含MatFile
对象。默认情况下,matfile
只允许从现有的mat文件加载。
exampleObject = matfile (“example.mat”);
要启用保存,请调用matfile
与可写的
参数。
exampleObject = matfile (“example.mat”,可写的,真正的);
或者,构造对象和集合属性。可写的
在单独的步骤。
exampleObject = matfile (“example.mat”);exampleObject.Properties.Writable = true;
的第一行装入B
从example.mat
为变量firstRowB
并修改数据。当你索引到与7.3版本mat文件相关的对象时,MATLAB®只加载你指定的部分变量。
: firstRowB = exampleObject.B (1);firstRowB = 2 * firstRowB;
更新变量的第一行中的值B
在example.mat
中存储的值firstRowB
.
: exampleObject.B (1) = firstRowB;
对于非常大的文件,最佳实践是一次向内存中读写尽可能多的数据。否则,重复的文件访问会对代码的性能产生负面影响。例如,假设您的文件包含许多行和列,加载一行需要大部分可用内存。与其一次更新一个元素,不如更新每一行。
[nrowsB, ncolsB] =大小(exampleObject,“B”);为exampleObject.B(row,:) = row * exampleObject.B(row,:);结束
如果不考虑内存,可以一次更新变量的全部内容。
exampleObject。B= 10 * exampleObject.B;
方法来更新变量保存
函数与附加
选择。的附加
选项要求保存
函数只替换指定的变量,B
,并保持文件中的其他变量不变。此方法总是要求加载并保存整个变量。
负载(“example.mat”,“B”);B(1,:) = 2 * B(1,:);保存(“example.mat”,“添加”,“B”);
方法将变量添加到文件中matlab.io.MatFile
对象。
exampleObject.C =魔法(8);
方法也可以添加该变量保存
函数与附加
选择。
C =魔法(8);保存(“example.mat”,“添加”,“C”);清晰的C
这个例子展示了如何从一个mat文件中动态访问变量的部分。这在处理变量名称并不总是已知的mat文件时非常有用。
考虑一个mat文件的例子,topography.mat
,它包含一个或多个名称未知的数组。构造一个MatFile
对象,该对象对应于topography.mat
.调用谁
来获取文件中的变量名。
exampleObject = matfile (“topography.mat”);varlist = (exampleObject)
varlist =4 x1细胞{“威尼斯平底渔船”}{‘topolegend}{‘topomap1} {' topomap2 '}
varlist
单元格数组中是否包含四个变量的名称topography.mat
.
第三和第四个变量,topomap1
而且topomap2
,都是包含色度图数据的数组。将每个变量的第三列的颜色图数据加载到结构数组的一个字段中,年代
.对于每个字段,指定一个字段名,该字段名是前缀为的原始变量名colormap_
.的属性访问每个变量中的数据exampleObject
.因为varName
是一个变量,请用括号括起来。
为索引= 3:4 varName = varlist{index};(1)。([“colormap_”, varName]) = exampleObject。(varName) (:, 3);结束
查看结构数组的内容,年代
.
年代
S =结构体字段:Colormap_topomap1: [64x1 double]
年代
有两个字段,colormap_topomap1
而且colormap_topomap2
,每个都包含一个列向量。
当您不知道mat文件中一个大变量的大小,并且希望一次只加载该变量的部分时,请避免使用结束
关键字。使用结束
关键字临时将变量的全部内容加载到内存中。对于非常大的变量,加载需要很长时间或生成出
的
内存
错误。相反,调用大小
方法MatFile
对象。
例如,此代码临时加载的全部内容B
在内存中:
lastColB = exampleObject.B(:,结束);
使用以下代码来提高性能:
[nrows, ncols] =大小(exampleObject,“B”);lastColB = exampleObject.B (:, ncols);
类似地,在任何时候引用具有表单语法的变量matObj.varName
,如exampleObject。B
, MATLAB®临时将整个变量加载到内存中。因此,一定要调用大小
方法MatFile
具有如下语法的对象:
[nrows, ncols] =大小(exampleObject,“B”);
而不是传递的全部内容exampleObject。B
到大小
函数,
[nrows, ncols] =大小(exampleObject.B);
语法上的差别很细微,但意义重大。
对象的任何加载或保存操作MatFile
对象与版本7或更早版本的mat文件关联,将整个变量临时加载到内存中。
使用matfile
函数来创建7.3版本格式的文件。例如,这段代码
newfile中= matfile(“newfile.mat”);
创建一个支持部分加载和保存的mat文件。金宝app
但是,默认情况下保存
函数创建版本7的mat文件。方法将现有的mat文件转换为7.3版本保存
函数与-v7.3
选项,如:
负载(“durer.mat”);保存(“mycopy_durer.mat”、“-v7.3”);
若要更改首选项以保存7.3版本格式的新文件,请访问环境上节首页选项卡,并单击首选项.选择MATLAB>一般>mat文件.中不可使用此首选项MATLAB在线™.