2011-12-04 108 views
7

我有一個矢量a = [1 5 3 4 2]。我想找到a的所有元素,它們是1<a<5。我如何在Matlab中做到這一點?在Matlab中查找匹配兩個條件的矢量元素

個人而言,我已經開發了一個解決方案,但它是很麻煩:

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

有什麼更好的辦法?

回答

14

使用logical indexing

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

這只是奇怪的一個不錯的選擇。我嘗試過'(1 texnic

5

一個簡單的調整你的代碼將簡化它:

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

這會返回'[3 4 5]'而不是'[3 4 2]'。 – 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