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

Спасибо, я действительно просто просил проверить, был ли какой-то более простой метод, который я пропустил. И было, вы это нашли! –

Смежные вопросы