2011-12-04 4 views
7

벡터 a = [1 5 3 4 2]입니다. 1<a<5 인 a의 모든 요소를 ​​찾고 싶습니다. 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

위한 좋은 선택이 될 것입니다. 나는'a (1 texnic

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