Use of CELLFUN instead of FOR loop

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.

 Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 9 Jun 2013
Edited: Azzi Abdelmalek on 9 Jun 2013
A=num2cell(rand(21,40)) % Example
out=arrayfun(@(x) cat(2,A{:,x}),1:size(A,2),'un',0)

2 Comments

Thanks! I tried something similar with cellfun but that didn't work.
This is a fast and short method. The "merge{n}= cat(2,A{:,n})" approach inside a loop is 50% faster.

Sign in to comment.

More Answers (1)

for n = 1:40
merge = cat(2,A{:,n})
end
is the same then
merge = cat(2,A{:,40})

4 Comments

This solution merges all the rows only of column 40 into a single vector. What I want to do is merge each column of cells such that you end up with a 1x40 cell array where each cell contains a merged vector of the cell rows.
That's what your code, also do
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?
Your for loop should be: (merge{n} instead of merge)
for n = 1:40
merge{n}= cat(2,A{:,n})
end

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!