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执行相同的操作
最好的方法是什么?
最好的方法是事先将结构定义为结构数组:
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)