Borrar filtros
Borrar filtros

Use of CELLFUN instead of FOR loop

8 visualizaciones (últimos 30 días)
Neil
Neil el 9 de Jun. de 2013
I have a 21x40 cell array with each cell containing a vector of variable length. I want to merge all of the cells in each column. I can achieve this using a FOR loop such as
A = 21x40 cell array
for n = 1:40
merge = cat(2,A{:,n})
end
How can I do this with, for example, CELLFUN or in some other way without using a FOR loop? Thanks a lot for any help.

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 9 de Jun. de 2013
Editada: Azzi Abdelmalek el 9 de Jun. de 2013
A=num2cell(rand(21,40)) % Example
out=arrayfun(@(x) cat(2,A{:,x}),1:size(A,2),'un',0)
  2 comentarios
Neil
Neil el 10 de Jun. de 2013
Thanks! I tried something similar with cellfun but that didn't work.
Jan
Jan el 10 de Jun. de 2013
This is a fast and short method. The "merge{n}= cat(2,A{:,n})" approach inside a loop is 50% faster.

Iniciar sesión para comentar.

Más respuestas (1)

Azzi Abdelmalek
Azzi Abdelmalek el 9 de Jun. de 2013
for n = 1:40
merge = cat(2,A{:,n})
end
is the same then
merge = cat(2,A{:,40})
  4 comentarios
Neil
Neil el 9 de Jun. de 2013
The for loop in my code does this on a per column basis. As I understand your code it only works on a single column. Am I missing something about your code?
Azzi Abdelmalek
Azzi Abdelmalek el 9 de Jun. de 2013
Editada: Azzi Abdelmalek el 9 de Jun. de 2013
Your for loop should be: (merge{n} instead of merge)
for n = 1:40
merge{n}= cat(2,A{:,n})
end

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by