1

I have a 1x24 cell array called chaining, whose each cell contains a 119x119 matrix:

enter image description here

I want to find the sum of each corresponding elements of all the cells, and store them in a matrix called result. That is, the (j,k)th element of result should contains the sum of the (j,k)th elements of all the matrices in the cell array chaining.

The code I wrote to do this is:

for j=1:size(chaining,2)
    for k=1:size(chaining,2)
        result(j,k) = sum(chaining{1,:}(j,k));
    end
end

But this gives error because apparently MATLAB can't aggregate cell arrays for some reason (i.e., the chaining{1,:} part).

Could anyone please show me how to go about doing this?

Kristada673
  • 3,512
  • 6
  • 39
  • 93

1 Answers1

3

how about

result = sum( cat(3, chaining{:}), 3 );

What just happened here?
First, we convert the cell array into a 3D array by "stacking" the 2D cell elements on the third dimension:

cat(3, chaining{:})

Once we have a 3D array of size 119-by-119-by-24 we can sum along the third dimension and get result of size 119-by-119:

sum( ..., 3 );

For more info see cat and sum help pages.


BTW,
If you insist on chaining{1,:}(jj,kk) type of solution (not recommended), you might find subsref command useful.

Community
  • 1
  • 1
Shai
  • 111,146
  • 38
  • 238
  • 371