2011-11-17 14 views
6

Ho avuto fortuna a trovare un modo per achieve intersect() faster su stack overflow con un vettore 1D pre-ordinati, quindi spero per la stessa fortuna per univoco();)modo più veloce per ottenere unique() in MATLAB se si presume un vettore pre-ordinato 1d?

Quasi 1/4'th del mio tempo di esecuzione è speso usando unique(). Vorrei accelerare questo, e posso supporre che sia un vettore pre-ordinato 1d. C'è qualche altra funzione di basso livello che posso usare direttamente per accelerare?

+0

È possibile aggiungere un puntatore alla domanda intersect? – John

+1

sicuro, fatto! – gnychis

risposta

7

È possibile utilizzare semplicemente diff per verificare se gli elementi consecutivi sono uguali.

vector = [1 2 3 4 4 5]; 

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

uniqueVector = 
    1  2  3  4  5 
+0

grazie, è fantastico! – lllllll

+0

Grazie! Ho provato un po ', usando sort + diff, è leggermente più veloce della funzione "unique" originale in MATLAB. –

+0

che ne dici di qualcosa di simile per il cell array? say, vector = {'a1', 'a1', 'b2'}; – user702846

Problemi correlati