matlab中的结构

Emm*_*mma 2 arrays matlab structure

%例

clear all
a1 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
a2 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
a3 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
a4 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
Run Code Online (Sandbox Code Playgroud)

假设结构代表一个时间序列,其中a1代表前5天(例如),a2代表第5-10天等等......我正在尝试将结构中的每个字段名组合起来,以便我有一个连续的系列(而不是将它们分成不同的结构.例如......

data1 = [a1.data1; a2.data1; a3.data1; a4.data1];

然后对data2和data3执行相同的操作

最好的方法是什么?

And*_*ein 7

最好的方法是事先将结构定义为结构数组:

a(1) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
a(2) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
a(3) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
a(4) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
Run Code Online (Sandbox Code Playgroud)

这使您可以非常轻松地获取数据:

cat(1,a.data1)
Run Code Online (Sandbox Code Playgroud)

但是如果你坚持使用N个结构,那么试试这个:

function so3
    a1 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
    a2 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
    a3 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
    a4 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));

    s{1} = struct2cell(a1);
    s{2} = struct2cell(a2);
    s{3} = struct2cell(a3);
    s{4} = struct2cell(a4);

    N = numel(fieldnames(a1));
    data = cell([1 N]);
    for i=1:N
        data{i} = cell2mat(cellfun(@(x){x{i}'},s));
    end

end
Run Code Online (Sandbox Code Playgroud)