2017-01-19 3 views
0

Ich habe 3 große Arrays: Array1, Array2 und Array3. Alle sind gleich groß und ihre Abmessung ist 7000000x1.Finding Indizes mehrerer Arrays, die eine Bedingung in Matlab

Ich versuche, die Indizes der Arrays zu finden, die einen gemeinsamen Zustand mit find Befehl in Matlab erfüllen, habe ich ähnliche

I2 = find (Array1 > a1 & Array1 < a2 & ... 
      Array2 > b1 & Array2 < b2 & ... 
      Array3 > c1 & Array3 < c2); 

a, b und c sind alle skalare Werte enthalten.

I2 ist innerhalb einer for-Schleife (~ 7M Iterationen) und dauert dieser Vorgang sehr viel Zeit! Irgendwelche Vorschläge zur Verbesserung dieser Codezeile?

+0

Das ist mehr als wahrscheinlich so schnell wie es wird. Gibt es einen besonderen Grund, dass Sie "finden" brauchen, anstatt nur ein logisches Array zu finden? – Suever

+0

dachte ich finde, ist die einfache Möglichkeit, es zu tun. Können Sie erklären, was mit dem logischen Array gemeint ist? – Mechanician

+1

Nun, was Sie mit 'I2' später tun? Verwenden Sie es, um Werte aus etwas anderem herauszuholen? Wenn ja, können Sie 'find' weglassen und nur die logische Anordnung durch den Rest der Anweisung zurück verwenden, um die Indizierung zu tun für Sie – Suever

Antwort

0

Dies ist wahrscheinlich schneller, mit logischer Indizierung nicht find

% Set up array of indices 
I = 1:numel(Array1); 

% Logical indexing the same as your Find function 
I2 = I2(Array1 > a1 & Array1 < a2 & ... 
     Array2 > b1 & Array2 < b2 & ... 
     Array3 > c1 & Array3 < c3); 

I2 jetzt enthält den Indizes mit Ihren Kriterien übereinstimmen.

Sie sagten, Sie dies wie

Array5 = Array4(I2) 

verwenden würden, wenn dies die einzige Anwendung ist, können Sie die I2 Schöpfung ganz überspringen und die gleiche logische Indizierung verwenden zur Erstellung verwendet wurden, wie so

Array5 = Array4(Array1 > a1 & Array1 < a2 & ... 
       Array2 > b1 & Array2 < b2 & ... 
       Array3 > c1 & Array3 < c3);