2011-12-04 14 views
7

私はベクトルa = [1 5 3 4 2]を持っています。私は1<a<5であるaのすべての要素を見つけたいと思います。 Matlabでどうすればいいですか? Matlabの2つの条件に一致するベクトル要素を見つける

は個人的に私は1つのソリューションを開発してきましたが、それは面倒だ:

a = [1 5 3 4 2]; 
ix = find(a>1); 
ix = ix(find(a(ix)<5)); 
disp(a(ix)) 

良い方法は何ですか?

答えて

5

あなたのコードに簡単に微調整がそれを簡素化します:

a = [1 5 3 4 2]; 
disp(find(a>1&a<5)) 
+0

これは '[3 4 2]'の代わりに '[3 4 5]'を返します。 – Karlo

3

ismemberは、これは単なる奇妙である離散例のために良い選択

a = [1 5 3 4 2]; 
find(ismember(a, 2:4)) 
+0

良い点。私は、あなたがこのソリューションのパフォーマンスと受け入れられたもののパフォーマンスについて何かを追加できるかどうか疑問に思います。 – texnic

+1

私はこの比較を行っており、論理インデックスを使用する方がより高速であることが望ましいです。 Find()ソリューションは限界〜5%、ismember()は論理インデックスよりも35%遅いです。 (比較は、500×30マトリックスの同じサイズの数値データを抽出し、100回の反復ごとに平均して行う)。 – professor

関連する問題