繁体   English   中英

在Matlab中从结构创建变量

[英]creating variables from structures in matlab

我有以下示例表示要解决的问题类型:

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中给出相应的值。

怎么办呢?

这可以解决您的问题:

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

让我知道我是否误会了。

您问题的直接答案是使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM