2016-10-31 16 views
1

Ich würde gerne wissen, ob es möglich ist, Zellfunktionen in verschachtelten Zellen-Arrays zu verwenden.Zellfunktionen für verschachtelte Zellen-Arrays in Matlab

Nehmen wir an, ich habe ein 3x3-Zellen-Array AB, jedes Element ist wiederum ein 3x3-Zellen-Array und jedes Element ist dann zum Beispiel eine 3x3-Matrix.

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

Wenn ich will, dann eine Operation in jeder Matrix tun, und somit in jedem Element jedes Element des Zellenfeldes (sorry, es klingt schrecklich), wie es funktionieren würde?

Ein Beispiel wäre, wenn Sie die Summe der Matrixzeilen, mit so etwas wie dieses ...

AB2=cellfun(@sum,AB); 

oder

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

bauen wollen Aber das funktioniert nicht. Ich habe mehrere Kombinationen mit anonymen Funktionen ausprobiert, aber sie haben auch nicht funktioniert. Gibt es eine Möglichkeit dies zu tun oder muss ich die cellfun in eine Schleife setzen?

Ich würde Ihre Hilfe zu schätzen wissen.

Anna

Antwort

1

cellfun wird funktionieren, wenn Sie eine nicht verschachtelten Zellenfeld haben, das heißt eine einzige Ebene von Zellen. Zum Beispiel, wenn Sie Ihre Array als 3 × 3 × 3 × 3-Zellen-Array von Matrizen definieren müssen Sie nur

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

Wenn Sie es wirklich eine Zellenanordnung von Zellen-Arrays von Matrizen tun müssen, können Sie Nest zwei cellfun. Dies wird sich nur langsam:

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

ich sum(x,1) bin mit der Summe jeder Matrix Spalte zu erhalten. Wenn Sie die Summe von jeder Zeile ersetzen möchten, ersetzen Sie 1 durch 2.

+0

Vielen Dank für die schnelle Antwort! Ich habe es mit der ersten Option versucht und es funktioniert, aber ich muss weiter mit dem zweiten Teil des Zellenarrays arbeiten - sagen wir für das Zellenarray '{a, b, c, d}' - mit Elementen in c und d . Wenn ich dies in eine Matrix für die folgenden Operationen mit 'cell2mat' konvertieren möchte, muss ich die Form des verschachtelten Zellenarrays beibehalten und kann stattdessen die zweite Option (mit zwei verschachtelten' cellfun') mit 'cell2mat' anwenden von 'Summe'. – AnnaGT

+0

Da Sie erwähnt haben, dass die zweite Option langsamer ist, gibt es eine andere Möglichkeit, dies zu tun? Oder gibt es eine Möglichkeit, c und d in eine Matrix umzuwandeln, die '{a, b}' als Zellenfeld mit '[c, d]' enthält, wenn das Zellenfeld die Form '{a, b, c, d}' hat ? Nochmals vielen Dank für Ihre Hilfe! – AnnaGT

+0

@Anna Ich verstehe nicht, was du meinst, tut mir leid. Vielleicht würde ein kleines Zahlenbeispiel helfen –

Verwandte Themen