Хитрость здесь заключается в том, чтобы использовать тот факт, что вы можете получить доступ к полю структуры по его имени:
name = 'Trajectories'
value = Data_Struct.(name)
Таким образом, в вашем случае, чтобы получить развернутые значения в виде массива ячеек, вы можете использовать:
%%Little example copying some of your structure
Data_Struct.Trajectories.Labelled = zeros(10);
Data_Struct.Analog = zeros(10);
Data_Struct.FrameRate = 300;
[UnrolledCell] = getUnrolledVal(Data_Struct,[]);
display(UnrolledCell)
UnrolledCell =
3 × 2 массив ячеек
'Labelled' [10×10 double]
'FrameRate' [ 300]
'Analog' [10×10 double]
Здесь функция getUnrolledVal выглядит просто:
function [UnrolledCell] = getUnrolledVal(struct_in,UnrolledCell)
fields_list = fieldnames(struct_in);
for i=1:length(fields_list)
field = fields_list{i};
if isstruct(struct_in.(field))
UnrolledCell = getUnrolledVal(struct_in.(field),UnrolledCell);
else
UnrolledCell = [UnrolledCell; {field} {struct_in.(field)}];
end
end
end