Сохранить правильное имя переменной в рабочей области

У меня есть функция в матлабе.

function [MEAN STD]=result(data)
MEAN=[mean(data)];
STD=std(data);
Training_data=[MEAN STD]
savefilename=sprintf('%s',inputname(1))
save(savefilename,'Training_data')
end

я установил имя файла данных = ET1_A_l1 (импортировано в рабочую область) (ET1_A_l1 = [1; 2; 1; 3; 1; 4], чтобы найти среднее и стандартное значение выбранных данных (ET1_A_l1) и сохранить статистическую функцию в форме .mat как показано ниже:

>>[MEAN STD]=result(ET1_A_l1)

В результате имя файла сохранения — ET1_A_l1.mat, и я импортирую ET1_A_l1.mat в рабочую область, он показывает «Training_data», как показано на рисунке 1.

рисунок 1,

Есть ли хорошая идея изменить имя переменной (Training_data) на ET1_A_l1 в рабочей области??


person Tony YEe    schedule 24.11.2012    source источник


Ответы (1)


Чтобы изменить имя переменной после загрузки (не имя поля), попробуйте следующее:

clear all; close all;

fname = 'ET1_A_l1';
Training_data=[0.5 .1]; % test data

savefilename=sprintf('%s', [fname '.mat']);
save(savefilename,'Training_data');

clear Training_data;

% important line
eval([fname '=importdata(''' savefilename ''');']);

ИЗМЕНИТЬ Чтобы изменить имена полей напрямую:

function [MEAN STD]=result(data)
    MEAN = mean(data);
    STD = std(data);
    varname = inputname(1);
    eval([varname '=[MEAN STD];']);
    savefilename = sprintf('%s',varname);
    save(savefilename, varname);
end

>> ET1_A_l1=[1;2;1;3;1;4];
>> >> [m s] = result(ET1_A_l1)

m =
     2
s =
    1.2649

>> clear all;
>> in = load('ET1_A_l1');

>> fieldnames(in)
ans = 
    'ET1_A_l1'

введите здесь описание изображения

person Tobold    schedule 24.11.2012
comment
код по-прежнему сохраняет переменную как данные обучения в ET1_A_l1.mat. - person Tony YEe; 24.11.2012
comment
В своем вопросе вы прямо просили изменить имя в рабочей области. См. мое редактирование, чтобы вместо этого изменить имя поля. - person Tobold; 24.11.2012
comment
Только имя переменной или имя переменной и имя файла? varname = [inputname(1) '_Trainingdata']; и изменить или не изменить savefilename = sprintf('%s',varname); на savefilename = sprintf('%s',inputname(1));. - person Tobold; 24.11.2012