主要内容

在mat文件中保存和加载部分变量

方法可以直接在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;

的第一行装入Bexample.mat为变量firstRowB并修改数据。当你索引到与7.3版本mat文件相关的对象时,MATLAB®只加载你指定的部分变量。

: firstRowB = exampleObject.B (1);firstRowB = 2 * firstRowB;

更新变量的第一行中的值Bexample.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);

语法上的差别很细微,但意义重大。

部分加载和保存需要7.3版本的MAT-Files

对象的任何加载或保存操作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在线™

另请参阅

||

相关的话题