Sum two cells and write to a third cell
21 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
User05
il 11 Mag 2015
Commentato: User05
il 12 Mag 2015
I have three cells A{10}, B{10} and C{10} of size 5x5. On each cell I want to do: A(:,1) = B(:,1) + C(:,1) I might also want to do: A(2:4,5) = B(2:4,5) + C(2:4,5)
Currently if I just write something like above, I will get error as Index exceeds matrix dimensions.
Any ideas on how this can be done (as fast as possible)
0 Commenti
Risposta accettata
Alfonso Nieto-Castanon
il 11 Mag 2015
Modificato: Alfonso Nieto-Castanon
il 11 Mag 2015
Probaby a loop is going to be fastest, e.g.:
for n=1:numel(A)
A{n}(:,1)=B{n}(:,1)+C{n}(:,1);
end
but if you really dislike for loops you could always do something like:
A = cellfun(@(a,b,c)[b(:,1)+c(:,1) a(:,2:end)], A, B, C, 'uni',0);
3 Commenti
Alfonso Nieto-Castanon
il 11 Mag 2015
Modificato: Alfonso Nieto-Castanon
il 11 Mag 2015
not sure what you mean by:
in1{1} = tin1(:,1) + tin2(:,1);
that will change the variable in1 instead of the variable out, it will make the first element of that cell array a 10 by 1 vector instead of a 10 by 10 matrix, and it will only modify that first element of the in1 cell array and none of the other elements. Is that what you really want?
If, instead, what you want is to change all five elements of out, but only the first column of each, and keep the rest of those 10x10 matrices the same as they were, then use the original code again (but first initialize out to something that shows you unambiguously what happened, e.g.
out = repmat({randn(10)}, 1,5);
Più risposte (1)
Walter Roberson
il 11 Mag 2015
Modificato: Walter Roberson
il 12 Mag 2015
cellfun()
However, the method to do it "as fast as possible" is likely to involve creating some mex code written in C and optimizing the heck out of it. It would probably take you a few months to learn how to do properly -- I know the resident expert James Tursa is still learning about using mex after what must be at least 8 years of working with it.
3 Commenti
Walter Roberson
il 11 Mag 2015
Use an anonymous function.
A = cellfun(@(a, b, c) [a(:,1:end-1), b(:,1) + c(:,1)], A, B, C, 'Uniform', false);
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!