how to sum matrics inside a cell array?

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

 Respuesta aceptada

dpb
dpb el 6 de Ag. de 2014
Editada: dpb el 22 de Abr. de 2017
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).

5 comentarios

Stephen Nagy
Stephen Nagy el 11 de Mzo. de 2017
That does not work.
dpb
dpb el 11 de Mzo. de 2017
For what definition of "not", pray tell?
Fizza Tariq
Fizza Tariq el 22 de Abr. de 2017
It's not working for me either, error:"too many input arguments"
dpb
dpb el 22 de Abr. de 2017
Hmmm....my bad, had tested only for two cells; I was thinking w/o checking that plus was enabled to handle a variable number of arguments but it isn't...see ERRATUM above Answer--dpb
LD
LD el 26 de Nov. de 2017
Is there other methods to solve this problem? This methods is less efficient then the for-loop

Iniciar sesión para comentar.

Más respuestas (2)

Evan
Evan el 6 de Ag. de 2014
Editada: Evan el 6 de Ag. de 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.).
dpb
dpb el 6 de Ag. de 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
>>

1 comentario

Kobi
Kobi el 6 de Ag. de 2014
this is not what i need i need to + sum the matrics like this A=rand(7)+rand(7)+rand(7)+.... and to recive one matrix each and every element in one matrix is added to another corresponding element the only problem is that all of the matrics are inside a cell

Iniciar sesión para comentar.

Categorías

Productos

Etiquetas

Preguntada:

el 6 de Ag. de 2014

Comentada:

LD
el 26 de Nov. de 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by