2011-11-17 20 views
6

Tôi đã may mắn tìm cách để achieve intersect() faster trên ngăn xếp tràn với một vector được sắp xếp trước 1d, vì vậy tôi hy vọng cho cùng một may mắn cho duy nhất();)cách nhanh hơn để đạt được duy nhất() trong MATLAB nếu giả định 1d vector được sắp xếp trước?

Gần 1/4'th thời gian chạy của tôi là sử dụng duy nhất(). Tôi muốn tăng tốc độ này, và tôi có thể giả định nó là 1d vector được sắp xếp trước. Có bất kỳ chức năng cấp thấp nào khác mà tôi có thể sử dụng trực tiếp để tăng tốc độ này không?

+0

Bạn có thể thêm con trỏ vào câu hỏi giao nhau của mình không? – John

+1

điều chắc chắn, đã hoàn tất! – gnychis

Trả lời

7

Bạn chỉ cần sử dụng diff để kiểm tra xem các phần tử liên tiếp có giống nhau hay không.

vector = [1 2 3 4 4 5]; 

uniqueVector = vector([true;diff(vector(:))>0]) 

uniqueVector = 
    1  2  3  4  5 
+0

cảm ơn, điều này thật tuyệt vời! – lllllll

+0

Cảm ơn! Tôi đã thử nghiệm một chút, sử dụng phân loại + diff, nó nhanh hơn một chút so với chức năng "duy nhất" ban đầu trong MATLAB. –

+0

tương tự như thế nào đối với mảng ô? nói, vector = {'a1', 'a1', 'b2'}; – user702846

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