загрузить файл мата в рабочую область - PullRequest
1 голос
/ 23 февраля 2012

У меня есть папка 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 ]

3 голосов
/ 23 февраля 2012

Причина в том, что функция вводит собственную переменную scope . 1 Переменные из файла .mat будут загружены в область действия функции, но не в глобальную Объем.


1. Смотри также http://www.mathworks.co.uk/help/techdoc/matlab_prog/f0-38052.html#f0-38463.

1 голос
/ 24 февраля 2012

Из этого вопроса я понимаю, что у вас есть данные, хранящиеся в .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

Код должен работать, сейчас я дома и не могу его проверить, извините.

Я бы предпочел решение с использованием сценариев, поскольку назначение переменных из одного рабочего пространства в другое может привести к проблемам с поддержкой и расширением кода (внезапно создаются переменные, и вы не видите, откуда они берутся). Вот несколько примеров как получить динамический доступ к полям структуры.

0 голосов
/ 23 февраля 2012

Вы можете изменить свою функцию так, чтобы она имела такой вывод, а затем в родительской (вызывающей) функции вы можете использовать данные этой выходной переменной

function output=data_startup
%WHC_PROJECT_STARTUP
bdclose all;
output=load('B\C\data_v2.0.mat');
...