создание переменных из структур в Matlab - PullRequest
1 голос
/ 20 февраля 2012

У меня есть следующий пример, который выражает тип проблемы, которую я пытаюсь решить:

clear all
textdata = {'DateTime','St','uSt','Ln','W'};
data = rand(365,4);
Final = struct('data',data,'textdata',{textdata})
clear textdata data

Исходя из этого, Final.data содержит значения, которые соответствуют заголовкам в Final.textdata, исключая первое ('DateTime'), таким образом, Final.data (:, 1) соответствует заголовку 'St' ... и т. Д. , Я пытаюсь создать переменную в рабочей области для каждого из этих векторов. Таким образом, у меня была бы переменная для St, uSt, Ln и W в рабочей области с соответствующими значениями, данными в Final.data.

Как это можно сделать?

Ответы [ 2 ]

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

Решит ли это вашу проблему:

    for ii=2:length( textdata )
      assignin('base',Final.textdata{ii},Final.data(:,ii-1));
    end

Дайте мне знать, если я неправильно понял.

2 голосов
/ 20 февраля 2012

Прямой ответ на ваш вопрос - использовать функцию assignin, например, так (отредактировать: как Макдуфф предложил 10 минут назад):

%Starting with a Final structure containing the data, like this
Final.textdata = {'DateTime','St','uSt','Ln','W'};
Final.data = rand(365,4);

for ix = 1:4
    assignin('base',Final.textdata{ix+1}, Final.data(:,ix));
end

Однако я настоятельно не рекомендую использовать имена динамических переменных для кодирования данных, подобных этой. Код, который начинается таким образом, обычно заканчивается спагетти-кодом, полным конкатенаций длинных строк и операторов eval. Лучше использовать структуру, как это

for ix = 1:4
    dataValues(Final.textdata{ix+1}) = Final.data(:,ix);
end

Или, чтобы получить тот же результат в одной строке:

dataValues = cell2struct(num2cell(Final.data,1), Final.textdata(2:end),2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...