加载和保存文件名是字符串的特定对象

Load and save specific objects where filename is a string

我有:

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

看来我需要load/save的功能版本。

但是我无法通过阅读帮助来弄清楚如何只提取我需要的变量。

我能看到的最好的是:

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( '..' );

...最好的方法是什么?

有点不清楚你的问题是什么,但如果你知道你想要保存的变量名,你可以将它们与文件路径(由 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{:})

我会说这并没有真正降低代码的可读性。