2016-09-21 61 views
0

我:加载和保存特定对象,其中文件名是一个字符串

save X a b c 
: 
load X a b 

我想:

TEMP_FOLDER = 'tmp' 
save TEMP_FOLDER/X a b c   % syntax fail 
: 
load TEMP_FOLDER/X a b 

看起来我需要加载的功能版本/保存。

但我不知道从阅读帮助如何提取我需要的变量。

我能看到的最好的是:

stuff = {'a', 'b'}; 
S = load([TEMP_FOLDER 'X'], stuff{:}); 
a = S['a']; 
b = S['b']; 
clear stuff S 

真的吗?呸!

也许我可以这样做:

load([TEMP_FOLDER 'X']); 

但后来我失去了哪些变量已经加载的信息,这使得代码难于追随别人。

看起来整理文件结构的代价是代码可读性。

但我可以吃我的蛋糕吃吗?

也许我可以:

cd(TEMP_FOLDER); 
load X a b 
cd('..'); 

...什么是做到这一点的最好方法是什么?

回答

1

有点不清楚你的问题是什么,但如果你知道你想保存的变量名,你可以将它们与文件路径一起保存(使用fullfile构造)。

save(fullfile(TEMP_FOLDER, 'X.mat'), 'a', 'b', 'c') 

并且对于加载,您可以执行相同的操作并显式传递要加载的变量。如果该文件中的变量不是,则还具有引发错误的额外好处。

% Load ONLY the variables: a, b 
load(fullfile(TEMP_FOLDER, 'X.mat'), 'a', 'b'); 

正如您所指出的那样,如果你想将变量名存储在单元阵列,你可以很容易地做到这一点与:

to_save = {'a', 'b', 'c'}; 
to_load = {'a', 'b'}; 

save(fullfile(TEMP_FOLDER, 'X.mat'), to_save{:}) 

load(fullfile(TEMP_FOLDER, 'X.mat'), to_load{:}) 

我要说的是,并没有真正减少代码可读性。

+0

谢谢,我真的只是要求检查是否有一些简单的方法,我错过了。有,你找到了! –

相关问题