2016-07-21 5 views
0

Ich habe derzeit ein 4x3500 Zellenfeld. Die erste Zeile ist eine einzelne Zahl, die zweite Zeile ist eine einzelne Zeichenfolge, die dritte und vierte Zeile sind ebenfalls einzelne Zahlen.Auswählen aller Spalten in einem Zellenfeld, die einen bestimmten Wert in der ersten Zeile enthalten?

Ex:

1 1 2 3 3 4 5 5 5 6 
hi no ya he ........ % you get the idea 
28 34 18 0 3 ...... 
55 2 4 42 24 ..... 

Ich möchte in der Lage sein, alle Spalten auswählen, die einen bestimmten Wert in der ersten Reihe hat. dh wenn ich wollte ‚1‘ als erste Zeile Wert, es

1 1 
hi no 
28 34 
55 2 

Dann sortieren Ich möchte auf der Grundlage der zweiten Zeile der Zeichenfolge zurückkehren würde. dh wenn ich have'hi‘wollte, wäre es zurück:

1 
hi 
28 
55 

ich versucht habe zu tun:

variable = cellArray{:,find(cellArray{1,:} == 1)} 

aber ich erhalte:

Error using find 
Too many input arguments. 

oder

Error using == 
Too many input arguments. 

Jede Hilfe wäre sehr willkommen! :)

+0

Ich habe MATLAB nicht, um dies zu testen. Sie können einen Vektor aus der ersten Zeile erstellen, indem Sie 'vec = [cellArray {1,:}]' 'ausführen. Nun, mach 'ind = vec == 1'. Sie wissen nun, welche Spalten Sie aus Ihrem Zellenfeld extrahieren möchten. Funktioniert das dann: 'cellArray {:, ind}'? –

Antwort

3

{} Indizierung wird eine comma separated list zurückgeben, die mehrere Ausgänge liefert. Wenn Sie dies zu find passieren, ist es die gleiche wie vorbei jedes Element Ihrer Zellenanordnung als separater Eingang. Dies führt zu dem Fehler in Bezug auf viele Eingabeargumente.

Sie wollen die durch Kommata getrennte Liste mit [] umgibt ein Array oder Zahlen zu erstellen. Auch brauchen Sie nicht find, weil Sie nur logische Indizierung verwenden können, um die Spalten greifen Sie wollen. Darüber hinaus werden Sie mit () indexieren müssen, um die relevanten Zeilen zu erhalten, um die durch Kommas getrennte Liste zu vermeiden.

variable = cellArray(:, [cellArray{1,:}] == 1) 
+0

Das ist fantastisch, hat perfekt funktioniert! Nur eine kurze Frage zu meinem eigenen Wissen: Warum dürfen wir '()' für ein cellArray verwenden, anstatt '{}' zu verwenden? – aboublemc

+0

@aboublemc '' {} erhält ein Element * * aus einem Zellenarray während '()' gibt eine Zellenanordnung, die bestimmte Elemente enthält. Wenn Sie mehrere Werte mit '{}' erhalten, wird eine Ausgabe für jeden der Werte zurückgegeben. – Suever

Verwandte Themen