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

6 ビュー (過去 30 日間)
Andrew
Andrew 2011 年 5 月 10 日
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

採用された回答

Walter Roberson
Walter Roberson 2011 年 5 月 10 日
myresult = arrayfun(@(c) norm(c{1}), C);
Or more compactly,
myresult = cellfun(@norm,C);

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeData Import and Analysis についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by