2011-11-17 58 views
6

Ben önceden sıralanmış 1d vektörü ile yığın taşması üzerine achieve intersect() faster bir yolunu bulmak iyi şanslar vardı, bu yüzden() benzersiz için aynı şans için umuyorum; Neredeyse zamanında 1/4'üncü olan)daha hızlı yolu?

unique() kullanarak harcadı. Bunu hızlandırmak istiyorum ve 1d önceden sıralanmış vektör olduğunu varsayabilirim. Bunu hızlandırmak için doğrudan kullanabileceğim başka düşük seviyeli fonksiyonlar var mı?

+0

Kavşak sorunuza bir işaretçi ekleyebilir misiniz? – John

+1

emin şey, bitti! – gnychis

cevap

7

Ardışık öğelerin aynı olup olmadığını kontrol etmek için diff'u kullanabilirsiniz.

vector = [1 2 3 4 4 5]; 

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

uniqueVector = 
    1  2  3  4  5 
+0

teşekkürler, bu harika! – lllllll

+0

Teşekkürler! Biraz test ettim, sort + diff kullanarak, matlabdaki orijinal "benzersiz" fonksiyondan biraz daha hızlı. –

+0

Hücre dizisi için benzer bir şey hakkında ne dersiniz? diyelim ki, vektör = {'a1', 'a1', 'b2'}; – user702846