Filter löschen
Filter löschen

Use of CELLFUN instead of FOR loop

8 Ansichten (letzte 30 Tage)
Neil
Neil am 9 Jun. 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.

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Azzi Abdelmalek
Azzi Abdelmalek am 9 Jun. 2013
for n = 1:40
merge = cat(2,A{:,n})
end
is the same then
merge = cat(2,A{:,40})
  4 Kommentare
Neil
Neil am 9 Jun. 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 am 9 Jun. 2013
Bearbeitet: Azzi Abdelmalek am 9 Jun. 2013
Your for loop should be: (merge{n} instead of merge)
for n = 1:40
merge{n}= cat(2,A{:,n})
end

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by