Mapping a function over each cell in a cell array using arrayfun

5 Ansichten (letzte 30 Tage)
Hi,
I am trying to "map" a function over each cell in a cell array. For example, suppose that I have a cell array which is filled with vectors of the same length:
C=cell(2,2);
C(1,1)={[1,1]};
C(1,2)={[2,2]};
C(2,1)={[3,3]};
C(2,2)={[4,4]};
Now I wish to apply the built-in Matlab function "norm" to each element in the cell array and return the results in an array (a regular, numeric array/matrix). I tried the following:
myresult=arrayfun(@(M,N) norm(cell2mat(C(M,N))),1:size(C,1),1:size(C,2))
But of course this does not give me what I really want; it gives me the following:
myresult =
1.4142 5.6569
which is only the norm of the (1,1) element (note that sqrt(1.^2 + 1.^2) = 1.4142) and the norm of the (2,2) element (note that sqrt(4.^2 + 4.^2) = 5.6569). This is because in my code, by specifying M as 1:size(C,1) and N as 1:size(C,2), the function is only evaluated at (M,N)=(1,1) and (M,N)=(2,2).
Can you please help me to see how I can modify my code to take the norm of all the arrays stored in the cell array C?
Thanks in advance,
Andrew DeYoung
Carnegie Mellon University

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 10 Mai 2011
myresult = arrayfun(@(c) norm(c{1}), C);
Or more compactly,
myresult = cellfun(@norm,C);

Weitere Antworten (0)

Kategorien

Mehr zu Data Import and Analysis finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by