加载和保存文件名是字符串的特定对象
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{:})
我会说这并没有真正降低代码的可读性。
我有:
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{:})
我会说这并没有真正降低代码的可读性。