2017-01-19 13 views
0

私は3つの巨大な配列:Array1,Array2およびArray3を持っています。すべてが同じサイズで、その寸法は7000000x1です。私はMATLABでfindコマンドを使用して、共通の条件を満たして配列のインデックスを見つけようとしていますmatlabで条件を満たす複数の配列のインデックスを整える

、私はa、b、cは、すべてスカラー値を含んでいる。このよう

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

を使用しました。

I2はforループ(約7M繰り返し)内にあり、この操作には膨大な時間がかかります!このコード行を改善するための提案はありますか?

+0

これはおそらくそれが得られるほど高速です。論理配列を出力するのではなく、 'find'が必要な特別な理由はありますか? – Suever

+0

私はそれが簡単な方法だと思った。論理配列を取得することによって何が意味されるのか説明できますか? – Mechanician

+1

'I2'で後で何をしますか?他の何かから価値をつかむためにそれを使っていますか?もしそうなら、あなたは 'find'を省略し、残りのステートメントで返された論理配列を使ってインデックスを作成することができます – Suever

答えて

0

これは可能性が速くなり、論理インデックスを使用していない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今、あなたの条件に一致するインデックスが含まれています。

あなたはそう

Array5 = Array4(Array1 > a1 & Array1 < a2 & ... 
       Array2 > b1 & Array2 < b2 & ... 
       Array3 > c1 & Array3 < c3); 
のように、これが唯一の使用であれば、あなたは完全に I2作成をスキップし、それを作成するために使用したのと同じ論理インデックスを使用することができます

Array5 = Array4(I2) 

のようにこれを使用すると述べました

関連する問題