0

我在 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
4

2 回答 2

1

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

S = load(filename, variables)

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

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

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

于 2012-03-03T23:44:42.633 回答
1

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

真正的优势在于,这允许在不加载或保存整个数组的情况下读取/写入大型数组的一部分。

对于您当前的结构,这对您的用途有限,因为无法以这种方式对结构的字段进行索引。但是一个相对较小的重构将允许您利用这些功能,具体取决于您的应用程序的其余部分。

于 2012-03-04T00:25:58.177 回答