我在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
答案 0 :(得分:1)
您似乎只对保存文件的特定块感兴趣。我建议更改已保存数据的格式,以便可以使用
加载各个变量S = load(filename, variables)
load
的形式。这样可以显着加快加载速度,因为您可以避免将所有不需要的数据从磁盘复制到内存中,只需立即释放即可。
如果您的数据已经采用结构形式,则可以使用save
这种形式(来自在线文档):
save(filename,' - struct',structName,fieldNames)存储的字段 指定的标量结构作为文件中的单个变量。如果 如果包含可选的fieldNames,则save函数仅存储 指定的结构字段。你不能指定变量和 同一个保存调用中的'-struct'关键字。
答案 1 :(得分:1)
从R2011a开始,您可以访问Mat文件的内容,而无需通过matfile
对象加载。 help matfile
了解详情。
真正的优点是,它允许读取/写入大型数组的部分而无需加载或保存整个数组。
对于您当前的结构,这是有限的用途,因为结构字段不能以这种方式索引。但是,相对较小的重复因子可以让您利用这些功能,具体取决于应用程序的其余部分。