I have an array of structures. Each structure is composed of a matrix. I need to extract a particular element of the matrix for every structure element. For example: i/p: if s is an array of 2 structures such that, s(1) = struct('field1', [1:3;4:6]); s(2) = struct('field1', [4:6;1:3]); o/p: [s(1).field1(1,3) s(2).field1(1,3)]; I can do it by the use of loops, but is there any efficient way to do it??

 채택된 답변

Andrei Bobrov
Andrei Bobrov 2017년 6월 28일

0 개 추천

s(1) = struct('field1', [1:3;4:6]);
s(2) = struct('field1', [4:6;1:3]);
z = cell2mat(struct2cell(s))
out = squeeze(z(1,3,:))'

댓글 수: 5

Sugyani Mahapatra
Sugyani Mahapatra 2017년 6월 28일
What if my structure contains more than 1 fields and the fields are matrices of different dimension??
Andrei Bobrov
Andrei Bobrov 2017년 6월 28일
please example..
Sugyani Mahapatra
Sugyani Mahapatra 2017년 6월 28일
s(1) = struct('field1', [1:3;4:6], 'field2', [1:10]); s(2) = struct('field1', [4:6;1:3], 'field2', [11:20]);
o/p: [s(1).field1(1,3) s(2).field1(1,3)];
I tried your above suggested method but that gives the following error: "Error using cell2mat (line 45) All contents of the input cell array must be of the same data type."
s(1) = struct('field1', [1:3;4:6], 'field2', [1:10]);
s(2) = struct('field1', [4:6;1:3], 'field2', [11:20]);
t = cat(3,s.field1);
out = squeeze(t(1,3,:))'
Sugyani Mahapatra
Sugyani Mahapatra 2017년 6월 28일
Cool...!!!
Thank you so much, sir. That works..!!!

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

추가 답변 (0개)

카테고리

도움말 센터 및 File Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by