2017-09-19 3 views
-1

Ich habe eine 3xn Matrix A mit Spalten x, y und z. Wie finde ich alle Zeilen, in denen X1> x> X2 UND Y1> y> Y2 ist (wobei X1, X2, Y1 und Y2 eine Box auf dem x-y-Gitter definieren)?Finden Sie Matrix-Zeilen mit mehreren Bedingungen für mehrere Spalten in Matlab

Ich habe bereits versucht, die folgenden Ansätze, die nicht funktionierten:

Abox = A(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2,:)); 

und

indices = find(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2); 
Abox = A(indices,:); 

beide zurückgeben leere Arrays.

gibt ein gefülltes Array für die erste Zeile zurück, dann ein leeres Array für das zweite.

+2

der Code, den Sie benötigen, ist dem Text sehr ähnlich, den Sie schrieben. Was hast du probiert? –

+0

Die obige Frage [Finde Vektorelemente, die zwei Bedingungen in Matlab entsprechen] (https://stackoverflow.com/questions/8378807/find-vector-elements-matching-two-conditions-in-matlab) deckt nicht mehrere Bedingungen ab mehrere Spalten der gleichen Matrix, nur mehrere Bedingungen für eine einzelne Spalte. Ich denke, das Problem, das ich habe, ist auf mehrere Spalten zurückzuführen. – Dandan

+0

Ich habe einige Notizen zu Dingen, die ich bereits versucht habe, zu der ursprünglichen Frage hinzugefügt. – Dandan

Antwort

0

Ihr Code korrekt

find(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2) 

Dies ist jedoch die Indizes der passenden Zeilen zurück. Sie müssen das verwenden, um die tatsächlichen Zeilen zu erhalten:

indices = find(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2) 
A2 = A(indices,:) 
+0

Ich habe gerade die Frage aktualisiert, um das Problem zu lösen ... Entschuldigung, ich hätte klarer sein sollen, dass ich das schon getan habe, aber 'find' hat eine leere Matrix zurückgegeben. – Dandan

+0

Dies funktioniert auf meinem Beispiel-Array. Stellen Sie sicher, dass Zeilen in Ihrem Array vorhanden sind, die die Kriterien tatsächlich erfüllen. Wenn 'find' eine leere Liste zurückgibt, bedeutet dies, dass keine Werte die Bedingungen erfüllen. – Aziz

+0

Ok, ich habe es herausgefunden ... Es gab einen Fehler in meinem Code, der die Werte verschoben hat, die zum Setzen der Kriterien verwendet wurden. Danke, dass du mich dazu gebracht hast, das zu debuggen und das zu finden! – Dandan

Verwandte Themen