繁体   English   中英

从嵌套的Matlab结构构建Matlab表

[英]Building a Matlab table from a nested Matlab struct

我如何从下面的代码生成的Matlab结构中构建表?

%create a nested structure
a_1=struct('a',50,'b',60);
a_2=struct('a',45','c',90);
a_3=struct('c',105,'d',32);
a=struct('Model1',a_1,'Model2',a_2,'Model3',a_3);

所需的输出看起来像以下代码的输出:

%desired output 
a=[50;45;0];
b=[60;0;0];
c=[0;90;105];
d=[0;0;30];
row_names={'Model1','Model2','Model3'};
col_names={'a','b','c','d'};

T=table(a,b,c,d,'RowNames',row_names)

但是请注意,我必须用0 s填充空白才能编写此代码,但是最好在其中添加其他内容,例如'-'N/A

并不是很好,但是像这样的事情可以帮到你。 使用fieldnames获得行名非常容易。

row_names = fieldnames(a);

为了确保所有结果的正确长度,获取表的所有可能列很有用。

% Obtain all existing fields to correctly assign all zeros
all_fields = {};

for r = 1:length(row_names)    
    act = eval('a.(row_names{r})');

    fields = fieldnames(act);

    all_fields = union(all_fields,fields);
end

然后使用正确的大小将其设置为零。 当在桌子内部使用时,这避免了拧紧尺寸。

% Set everything to zero
for f_num = 1:length(all_fields)
    res.(all_fields{f_num}) = zeros(size(row_names));
end

最后,必须遍历所有初始结构并将这些值添加到相应的结果中。

% Overwrite zeros by existing values
for r = 1:length(row_names)    
    act = eval('a.(row_names{r})');

    fields = fieldnames(act);

    for f = 1:length(fields)
        res.(fields{f})(r) = act.(fields{f});
    end
end

table(res.a,res.b,res.c,res.d,'RowNames',row_names)

为了避免出现更多评估,我对结果使用了struct

暂无
暂无

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

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