Vectorizing Table in Structure without Loop

조회 수: 3 (최근 30일)
Gabor
Gabor 2021년 4월 26일
댓글: Gabor 2021년 4월 27일
Hi,
I created this short code to explain my question:
for i=1:10
dynamic_field_name=string(cell_w_strings(i, 1)); %%% for eg.: "T1", "T2"
Table=Structure.(dynamic_field_name); %%% for eg.: Structure.T1 is a table
Date_v=Table.Date_column;
or in other words
Date_v{i}=Structure.T1.Date_column;
...
Date_v{i}=Structure.T2.Date_column;
end
I would like to vectorize this with no loop, something like with structfun cellfun or however it is possible:
Date_v{1}=Structure.T1.Date_column;
Date_v{2}=Structure.T2.Date_column;
...
Date_v{:}=Structure.(dynamic_structure_name(:)).Date_columns;
or
Date_v{:}=Structure.Cell{:}.Date_columns;
I understand that this might not be possible with dynamic field names in structure
But since I can change the dynamic field to a cell array than that is not the main point I am trying to ask.
The main question is how I can iterate through the tables in all structure fields to get the Date columns out and use them as vectors in an array
I just completely want to get wred of looping and create nice and sound vectorized script.
Thank you so much!

채택된 답변

Mohammad Sami
Mohammad Sami 2021년 4월 27일
편집: Mohammad Sami 2021년 4월 27일
Are the Tables T1, T2, Tn compatible with each other, meaning they have the same column definitions.
Are the only data in the structure is T1, T2.. Tn.
If that is the case you can try doing this.
temp = struct2cell(s);
tall = vertcat(temp{:}); %concatenate all the tables.
If not then we need to do some extra processing.
temp = struct2cell(s);
temp = temp(cellfun(@istable,temp));
% assuming all table have Date_column
dts = cellfun(@(x)x.Date_column,temp,'UniformOutput',false);
dtsall = vertcat(dts{:});

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by