2011-12-04 38 views
7

Tôi có một vector a = [1 5 3 4 2]. Tôi muốn tìm tất cả các phần tử của a, là 1<a<5. Làm thế nào để tôi làm điều đó trong Matlab?Tìm các phần tử vectơ khớp với hai điều kiện trong Matlab

Cá nhân tôi đã phát triển một giải pháp, nhưng nó cồng kềnh:

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

một cách tốt hơn là gì?

Trả lời

14

Sử dụng logical indexing:

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

Đây chỉ là lạ. Tôi đã thử 'a (1 texnic

5

Một tinh chỉnh đơn giản để mã của bạn sẽ đơn giản hóa nó:

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

Điều này trả về '[3 4 5]' thay vì '[3 4 2]'. – Karlo

3

ismember là một lựa chọn tốt cho những trường hợp rời rạc

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

Điểm tốt. Tôi tự hỏi nếu bạn có thể thêm một cái gì đó về hiệu suất của giải pháp này so với giải pháp được chấp nhận. – texnic

+1

Tôi đã thực hiện so sánh này và thích hợp hơn để sử dụng nguyên nhân lập chỉ mục logic là nhanh hơn. Tìm() giải pháp là biên ~ 5% và ismember() là ~ 35% chậm hơn so với lập chỉ mục logic. (Việc so sánh được thực hiện thông qua khai thác cùng một dữ liệu số kích thước của một ma trận 500 * 30 và trung bình trên 100 lần lặp). – professor

Các vấn đề liên quan