2016-06-02 8 views
0

Ich habe ein Zell-Array, in dem jede Zelle eine Matrix (verschiedene Größen) enthält. Ich möchte, zum Beispiel nehmen alle zweiten Spalten der Matrizen einen Befehl wie die Bereitstellung:MATLAB Indexierung aller Zellen in einem Matrix-Array

aux = cArray{:}(:,2) 

Das Ergebnis Ich mag würde, um eine Zellenmatrix erhalten wird, wobei jede Zelle der zweiten Spalte der ursprünglichen Matrix enthält , aber der Befehl funktioniert nicht (und ich kann sogar sehen, warum, denn die Ausgabe von cArray {:} ist keine Matrix ...) Gibt es einen kompakten Befehl, um zu bekommen, was ich will anstelle eines Zyklus füllen die Zell-Array?

+0

@ Luis Antwort zeigt, wie es gemacht wird, aber wenn Ihre Zellenelemente alle die gleiche Größe haben, sollten Sie erwägen, zu mehrdimensionalen Arrays zu wechseln. Gestern [eine sehr ähnliche Frage kam] (http://stackoverflow.com/q/37557025/5067311) (eklatante Eigenwerbung), Sie können dort finden, wie * das * getan wird. –

Antwort

4

Der Grund, warum es nicht funktioniert, ist, dass die Indexierung eines Zellenarrays mit {:} eine comma-separated list erzeugt, die nicht mehr indexierbar ist. Sie können es als den "unverpackten" Inhalt des Zellenarrays betrachten, der durch Kommas getrennt ist.

können Sie erreichen, was Sie mit cellfun wollen:

result = cellfun(@(x) x(:,2), cArray, 'uniformoutput', false); 

Dies gilt die anonyme Funktion @(x) x(:,2) zu jedem Inhalt der Zelle, und packt die Ergebnisse in einem Zellenfeld.