2016-03-29 12 views
3

Wenn ich ein Zellenarray mit wenigen Matrizen habe. Jede Matrix hat unterschiedliche Zeilennummern, aber gleiche Spaltennummern.Wie entferne ich eine bestimmte Spalte aus Matrizen in einem Zellenfeld in MATLAB?

C{1} = [30x4 double] C{2} = [25x4 double] C{3} = [32x4 double] ...etc

Wenn ich will, die erste und die dritte Spalte in jeder Matrix entfernen, was soll ich tun?

So wird die Zellenmatrix werden:

new_C{1} = [30x2 double] new_C{2} = [25x2 double] new_C{3} = [32x2 double]

wo diese beiden Spalten in new_C aus der zweiten und der vierten Spalte in der Zellenanordnung C.

Antwort

1

Ich nehme an, Sie die versucht haben, offensichtliche Lösung mit einer for Schleife. Ein anderer Weg wäre cellfun verwenden, kombiniert mit logical indexing:

columns = false(1, 4); 
columns([2, 4]) = true; 
D = cellfun(@(m)m(:,columns), C, 'UniformOutput', 0) 

zuerst, wir einen Indexvektor für die Spalten aufzubauen. Dann verwenden wir cellfun, um die Indexierung auf jedes Element im Zellen-Array anzuwenden. Wir verwenden 'UniformOutput', 0, weil wir ein anderes Zellenarray erhalten wollen (und die Ergebnisse der Indizierung sind nicht skalar).

+0

Danke! Das funktioniert!! Ja, ich habe eine for-Schleife versucht, aber ich habe nachgedacht, ob es andere effizientere Wege gibt, es zu lösen. Tut mir leid, ich hätte das erwähnen sollen. –

Verwandte Themen