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 件のコメント
Andrei Bobrov
Andrei Bobrov 2019 年 11 月 27 日
S(any(cellfun(@numel,struct2cell(S)) < 5)) = []
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

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by