Question

I have a code in MATLAB that produces 1000 x 1000 arrays in a loops that runs ten times; to try and save all these loops, I commit these arrays to a cell; Now I have a cell 1 x 10 cell nalled PL, each element being a 1000 x 1000 array; I want to sum these in the easiest way possible, so that I get one 1000 x 1000 output. I've tried using

PLtot = cellfun(@sum,PL, 'UniformOutput',false);

but this does not work at all for me - any ideas? I'm sure this should be simple but having a headache doing it!

Was it helpful?

Solution

Instead of storing your array into cellarray.

Just add an extra dimension to your initial array. Always preallocate the size to the array.

PL = zeros(1000,1000,10);

So when you want to access to each image it's easier. And for the sum just do :

PLtot = sum(PL,3);

OTHER TIPS

The following works for me:

PLtot =  sum(cat(3,PL{:}),3);

It concatenates the arrays in the 3rd dimension and then simply sums along this dimension.

Your code is not wrong, so you shouldn't get an error. I think you just aren't satisfied with the result.

cellfun returns you the cell array of column-wise-sum vectors, each one is the result of applying sum function to individual cell. You just need to transform it to a matrix.

PLtotcell = cellfun(@sum,PL, 'UniformOutput',false); % 
PLtot = cell2mat(PLtotcell');

I have to say that this is not the most efficient way in your case. Check other answers for better performance. I just wanted you to understand how your code works.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top