Загрузить файл мата в рабочую область
У меня есть папка A, которая содержит папки B и C
A--B
C--|
--|mat file
на уровне папки у меня есть сценарий запуска, и я хочу из этого сценария загрузить данные, доступные в файле data.mat, доступном в папке C1.
Итак, из моего скрипта A_script.m я сделал:
load('C/C1/data.mat');
содержимое файла скрипта:
function data_startup
%WHC_PROJECT_STARTUP
bdclose all;
load('B\C\data_v2.0.mat');
но это ничего не делает, данные не загружены и никаких ошибок не возникает! Кто-нибудь может мне помочь?
Спасибо
3 ответа
Из этого вопроса я понимаю, что у вас есть данные, хранящиеся в.mat-файле в подпапке, и вы хотите использовать их для некоторой инициализации. Если вы ожидаете использовать их позже из базового рабочего пространства, то одной из возможностей будет изменение функции на скрипт:
%WHC_PROJECT_STARTUP
bdclose all;
load(fullfile('B', 'C', 'data_v2.0.mat'));
Я бы порекомендовал здесь использование функции
fullfile('B', 'C', 'data_v2.0.mat')
потому что это делает ваш код независимым от платформы (Linux использует '/', Windows '\'). Если вы хотите, чтобы содержимое.mat-файла загружалось в базовое рабочее пространство, просто сохраните приведенный выше код в виде скрипта и выполните его.
Если вы настаиваете на том, чтобы прочитать файл в функции и использовать его позже в базовом рабочем пространстве, посмотрите на следующий код
function data_startup()
%WHC_PROJECT_STARTUP
bdclose all;
temp_data=load(fullfile('B', 'C', 'data_v2.0.mat')); % will be loaded as structure
file_variables=fieldnames(temp_data);% get the field names as cell array
for ii=1:length(file_variables)
% file_variables{ii} - string of the field name
% temp_data.(file_variables{ii}) - dynamic field reference
assignin('base', file_variables{ii}, temp_data.(file_variables{ii}));
end
Код должен работать, сейчас я дома и не могу его проверить, извините.
Я бы предпочел решение сценариев, назначение переменных из одного рабочего пространства в другое может привести к проблемам с поддержкой и расширением кода (внезапно создаются переменные, и вы не видите, откуда они берутся). Вот еще несколько примеров того, как динамически обращаться к полям структуры.
Причина в том, что функция вводит свою собственную переменную область видимости.1 Переменные из файла.mat будут загружены в область действия функции, но не в глобальную область.
1. См. Также http://www.mathworks.co.uk/help/techdoc/matlab_prog/f0-38052.html.
Вы можете изменить свою функцию так, чтобы она выглядела как эта, тогда в вашей родительской (вызывающей) функции вы можете использовать данные в этой выходной переменной
function output=data_startup
%WHC_PROJECT_STARTUP
bdclose all;
output=load('B\C\data_v2.0.mat');