2011-12-04 18 views
7

a = [1 5 3 4 2] numaralı bir vektör var. 1<a<5 olan tüm öğeleri bulmak istiyorum. Matlab'da nasıl yapabilirim? İki koşulu eşleştiren vektör elemanları bulun Matlab

Şahsen ben bir çözüm geliştirdik, ama hantal değil:

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

daha iyi bir yolu nedir?

cevap

14

Kullanım logical indexing:

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

için iyi bir seçimdir. Ben (1 texnic

5

kodunuzu basit çimdik bunu basitleştirmek olacaktır:

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

Bu, [3 4 2] 'yerine' [3 4 5] 'döndürür. – Karlo

3

ismember ayrık durumlarda

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

İyi nokta. Bu çözümün performansı hakkında kabul edilene göre bir şey ekleyebilir misiniz diye merak ediyorum. – texnic

+1

Bu karşılaştırmayı yaptım ve mantıksal indekslemenin kullanılması tercih sebebi daha hızlıdır. Bul() çözüm marjinal ~% 5 ve ismember() ~% 35 mantıksal endeksleme daha yavaş. (Karşılaştırma, 500 * 30 matrisin aynı büyüklükteki sayısal verilerin çıkarılmasıyla elde edildi ve her 100 tekrar için ortalaması alındı). – professor