在matlab中从结构创建变量

时间:2012-02-20 14:20:30

标签: matlab variables structure

我有以下示例,它表示我正在尝试解决的问题类型:

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 个答案:

答案 0 :(得分:3)

这会解决您的问题:

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

如果我误解,请告诉我。

答案 1 :(得分:2)

你的问题的直接答案是使用assignin函数,就像这样(编辑:就像10分钟前macduff建议的那样):

%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)