Asked by Kobi
on 6 Aug 2014

i have 4 matrics inside a cell and i need to sum them all currenyly i use this:

R=R{1}+R{2}+R{3}+R{4}

the original R is a cell with 4 matrics

Answer by dpb
on 6 Aug 2014

Edited by dpb
on 22 Apr 2017

Accepted Answer

Oh, misunderstood the query...that's simply

S=plus(R{:})

S =

1.3771 0.5139

1.1590 0.7149

>> all(all(S==R{1}+R{2}))

ans =

1

>>

Just used two cells here, but works for any number. As noted elsewhere sizes must be commensurate.

ERRATUM Does NOT work as written for any number of cells; plus isn't as smart as I was thinking it was/is... :(

Instead use

S=sum(cat(3,R{:}),3);

As another poster noted, all cells must contain conformantly-sized arrays.

NB: The result will be class of the content of the cell (default double, of course).

Fizza Tariq
on 22 Apr 2017

It's not working for me either, error:"too many input arguments"

dpb
on 22 Apr 2017

lingyun ding
on 26 Nov 2017

Is there other methods to solve this problem? This methods is less efficient then the for-loop

Sign in to comment.

Answer by Evan
on 6 Aug 2014

Edited by Evan
on 6 Aug 2014

Are all the matrices in your cell array the same size? If so, this should work:

% Get random cell array with n cells. Here n = 3

A = {rand(4) rand(4) rand(4)}

n = size(A,2);

% Get size of matrices in cell.

matSize = size(A{1},1);

B = reshape(cell2mat(A),matSize,[],n);

% Sum 3D matrix along 3rd dimension

C = sum(B,3);

If they're different sizes, this either wont work or we need more information about how you want the different sizes handles (e.g. trimming, padding, etc.).

Sign in to comment.

Answer by dpb
on 6 Aug 2014

One way, seems should be better but it's still first cup o' coffee this morning...

>> R={rand(2) rand(3)}

R =

[2x2 double] [3x3 double]

>> sum(cellfun(@(x) sum(x(:)),R))

ans =

8.7056

>>

Kobi
on 6 Aug 2014

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.