Clear Filters
Clear Filters

convert the field of a struct in a matrix

4 views (last 30 days)
Hi,
I have a struct [71x71] with different fields including WA (attached);
I want to create a matrix A [71x71] with the values including in WA.
I have used this code:
for j=1:71
for i=1:71
a(i,j)=MaxST(i,j).WA
end
end
but gives an error 'Subscripted assignment dimension mismatch.'
Can you help me to solve the problem, thanks

Accepted Answer

Stephen23
Stephen23 on 26 Apr 2017
Edited: Stephen23 on 26 Apr 2017
Because some of the WA fields are empty, you will have to use a cell array:
out = reshape({MaxST.WA},[71,71])
If all of the fields were scalar numerics, you would be able to put them into a simple numeric array:
out = reshape([MaxST.WA],[71,71])
Both of these use the syntax shown in the documentation:

More Answers (1)

KSSV
KSSV on 26 Apr 2017
Note that few values of the structure are empty..that's why error popped out. you may consider this:
load matlab2 ;
a = zeros(71,71) ;
for j=1:71
for i=1:71
if isempty(MaxST(i,j).WA)
a(i,j) = NaN ;
else
a(i,j)=MaxST(i,j).WA ;
end
end
end
  4 Comments
Stephen23
Stephen23 on 26 Apr 2017
Edited: Stephen23 on 26 Apr 2017
"...for beginners the way to learn is by looping."
Why? Who said this? According to what pedagogical theory?
"Let them learn first and then they can go for vectorizing and use fancy inbuilt functions."
Why? Code vectorization is simpler than using loops! Simpler to write, simpler to read, simpler to understand... And as the documentation states "MATLAB® is optimized for operations involving matrices and vectors." When you state the beginners should not use vectorized code you are saying that you want beginners to have sub-optimal code.
I disagree.
I see absolutely no reason why beginners should not learn how to use MATLAB efficiently. That is what I would want, if I were learning MATLAB from scratch. Because basically you are saying that beginners are unable to understand MATLAB... and that later, after teaching them inefficient ways of solving problems, you will let them discover that everything they have been taught is a waste of time, and that you have been keeping the better methods to yourself. Why keep the better methods secret?
Would you want to be taught how to do things badly, and then later have to re-learn everything again?
What are "fancy inbuilt functions": do you mean the standard functions and syntax that MATLAB has, that anyone can use, and that are fully documented in the help? Why waste a nice high-level language like MATLAB as it was some low-level language like C++, and use ugly loops to solve everything?
KSSV
KSSV on 26 Apr 2017
Edited: KSSV on 26 Apr 2017
All the users are not as fast as you think....I think when they code for the first time with out any coding experience, I don't think they can avoid loops. I am not asking them or some one to use bad ways or not to vectorize the code, to understand what happens for the first time, loop cannot be avoided.

Sign in to comment.

Categories

Find more on Matrices and Arrays 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!