在MATLAB中访问.mat文件(不使用Load函数)

时间:2012-03-03 23:31:40

标签: matlab file-io struct cell mat-file

我在Matlab中有一个结构(矩阵)已保存在硬盘上。我目前使用load在我的函数中加载这些文件。你有什么建议这样做的方式要快得多吗?

(是的,我可以将结构作为变量传递给我的函数,但由于内存问题,这是不可能的!)。谢谢!这将是一个很大的帮助!

A = struct('local', randn(200000,14), 'usd', randn(200000,14), ...
          'ttm', randn(180000,14), 'avg', randn(190000,14), ...
          'ttm1yr', randn(190000,14), 'avg1yr', randn(190000,14)) ;
save('A.mat', 'A') ;                     clear all;clc

tic, load A.mat, A=A.local; toc  %--> Takes 1.05 seconds

2 个答案:

答案 0 :(得分:1)

您似乎只对保存文件的特定块感兴趣。我建议更改已保存数据的格式,以便可以使用

加载各个变量
S = load(filename, variables)

load的形式。这样可以显着加快加载速度,因为您可以避免将所有不需要的数据从磁盘复制到内存中,只需立即释放即可。

如果您的数据已经采用结构形式,则可以使用save这种形式(来自在线文档):

  

save(filename,' - struct',structName,fieldNames)存储的字段   指定的标量结构作为文件中的单个变量。如果   如果包含可选的fieldNames,则save函数仅存储   指定的结构字段。你不能指定变量和   同一个保存调用中的'-struct'关键字。

答案 1 :(得分:1)

从R2011a开始,您可以访问Mat文件的内容,而无需通过matfile对象加载。 help matfile了解详情。

真正的优点是,它允许读取/写入大型数组的部分而无需加载或保存整个数组。

对于您当前的结构,这是有限的用途,因为结构字段不能以这种方式索引。但是,相对较小的重复因子可以让您利用这些功能,具体取决于应用程序的其余部分。