MATLAB Answers

Zoe
0

Loop through many items in an cell array and reshape every 6 items in sequence and put them into matrices each by each

Asked by Zoe
on 6 Feb 2018
Latest activity Edited by Matt J
on 6 Feb 2018
My cell array "img" has over 3000 matrices in it. I want to reshape every 6 of them from 500*600 to 300,000*1, and then add them together into a 300,000*6 matrix. For now, I only know how to do it manually but processing all of them will eventually cost lots of time. I will be grateful to any looping ideas or hints or helpful links. Thank you.
Q(:,1) = reshape(cell2mat(img(1,1)),[300000 1]);
Q(:,2) = reshape(cell2mat(img(1,2)),[300000 1]);
Q(:,3) = reshape(cell2mat(img(1,3)),[300000 1]);
Q(:,4) = reshape(cell2mat(img(1,4)),[300000 1]);
Q(:,5) = reshape(cell2mat(img(1,5)),[300000 1]);
Q(:,6) = reshape(cell2mat(img(1,6)),[300000 1]);

  0 Comments

Sign in to comment.

Tags

1 Answer

Answer by Matt J
on 6 Feb 2018
Edited by Matt J
on 6 Feb 2018
 Accepted Answer

If speed is important, and if all of your matrices are the same size (500x600), then it was a mistake to split them across a cell array in the first place. You could have just started with a 3D array of size 500x600x3000, which would be much faster. However, if you are stuck with that situation, then you can proceed as follows:
array=cell2mat(img); %avoid this, if possible
array=reshape(array,3e5,6,[]);
Q=sum(array,3);

  0 Comments

Sign in to comment.