Delete end points from columns in a structure array

조회 수: 9(최근 30일)
SS
SS 2019년 11월 27일
댓글: SS 2019년 11월 27일
Hello.
I have a structure array S (1 x 50000) with 10 fields. The elements in the fields are column matrices (1 X M) with their size consistent for given S(i).
I want to delete tails in all the 10 fields (2 data points on each side - at the beginning and the end of the vector) which, should result in the array size of (1 X M-4).
For example, the input is something like this
S(1).f1=[1,2,3,4,5,6,7,8,9,10];
S(1).f2=[2,4,6,8,10,12,14,16,18,20];
S(2).f1=[10,20,30,40,50,60,70];
S(2).f2=[150,200,250,300,350,400,450];
I want the output to be,
S(1).f1=[3,4,5,6,7,8];
S(1).f2=[6,8,10,12,14,16];
S(2).f1=[30,40,50];
S(2).f2=[250,300,350];

채택된 답변

Andrei Bobrov
Andrei Bobrov 2019년 11월 27일
S = cell2struct(cellfun(@(x)x(3:end-2),struct2cell(S),'un',0),fieldnames(S));
  댓글 수: 3
SS
SS 2019년 11월 27일
Thank you.

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Luna
Luna 2019년 11월 27일
편집: Luna 2019년 11월 27일
I did something like this:
newS2 = arrayfun(@(y) structfun(@(x) x(3:end-2),y,'uni',false),S)
Or:
for i = 1:numel(S)
newS(i) = structfun(@(x) x(3:end-2),S(i),'UniformOutput',false)
end

범주

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by