2016-09-21 60 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

謝謝,我真的只是要求檢查是否有一些簡單的方法,我錯過了。有,你找到了! –

相關問題