我有以下示例,它表示我正在尝试解决的问题类型:
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中给出相应的值。
怎么可以这样做?
答案 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)