2016-10-31 5 views
1

ネストされたセル配列でセル関数を使用できるかどうかを知りたいと思います。Matlabのネストされたセル配列のセル関数

私は3x3セルアレイABを持っているとしましょう。それぞれの要素は3x3セルアレイであり、各要素は例えば3x3マトリックスです。

A=cell(3,3); 
    AB=A; 
    for i=1:1:3 
     for j=1:1:3 
      AB{i,j}=cell(3,3) 
     end 
    end 

私はその後、各マトリックスに操作をしたいので、セル配列の各要素の各要素(申し訳ありません、それは恐ろしい音)で、どのように機能するでしょうか?

あなたはこのようなもので、行列の行の合計を構築したい場合などは、だろう...

AB2=cellfun(@sum,AB); 

または

AB2=cellfun(@sum,AB{:,:}); 

しかし、これは動作しません。私は匿名関数を使って複数の組み合わせを試みましたが、どちらもうまくいきませんでした。 これを行う方法はありますか、またはcellfunをループに入れる必要はありますか?

私はあなたの助けに感謝します。

アンナ

答えて

1

cellfunあなたはネスト解除セル配列、細胞の、すなわち、単一のレベルを持っている場合は動作します。あなたは行列の3×3×3×3セル配列として、あなたの配列を定義した場合たとえば、あなたはちょうどあなたが本当にそれを行列のセル配列のセル配列を行う必要がある場合は、入れ子にすることができ

result = cellfun(@(x) sum(x,1), AB, 'uniformoutput', false); 

が必要2つcellfun。これは遅くなります。

result = cellfun(@(ab) cellfun(@(x) sum(x,1), ab, 'uniformoutput', false), AB, 'uniformoutput', false); 

私は、各行列の合計を取得するためにsum(x,1)を使用しています。 行の合計がの場合は、12に置き換えてください。

+0

すばやく返信いただきありがとうございます。 私は最初のオプションで試してみましたが動作しますが、セル配列の2番目の部分で操作を続ける必要があります - セル配列 '{a、b、c、d}'について - cとdの要素。これを 'cell2mat'を使って以下の演算のための行列に変換したいのであれば、入れ子になったセル配列の形を保つ必要があり、' cell2mat'を使って2つの入れ子にした 'cellfun'を使うことができます「合計」の。 – AnnaGT

+0

2番目のオプションが遅いと述べたので、これを行う方法は他にありますか?あるいは、セル配列が '{a、b、c、d}'の形をしている場合、 '{a、b}'を '[c、d]'を含むセル配列として保持する行列にcとdを変換する方法があります。 ? もう一度ご協力いただきありがとうございます。 – AnnaGT

+0

@Annaあなたが何を意味するのか分かりません。申し訳ありません。おそらく小さな数値例が助けになるでしょう –

関連する問題