2011-11-17 8 views
6

tuve buena suerte para encontrar una manera de achieve intersect() faster de desbordamiento de pila con un vector 1d preclasificados, así que estoy esperando para la misma suerte para única();)manera más rápida de lograr unique() en matlab si se supone 1d vector ordenado previamente?

Casi 1/4'th de mi tiempo de ejecución es gastado usando unique(). Me gustaría acelerar esto, y puedo suponer que se trata de un vector preordenado. ¿Hay alguna otra función de bajo nivel que pueda usar directamente para acelerar esto?

+0

¿Puedes agregar un puntero a tu pregunta de intersección? – John

+1

¡hecho seguro! – gnychis

Respuesta

7

Puede simplemente usar diff para verificar si los elementos consecutivos son los mismos.

vector = [1 2 3 4 4 5]; 

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

uniqueVector = 
    1  2  3  4  5 
+0

gracias, ¡esto es genial! – lllllll

+0

¡Gracias! Probé un poco, usando sort + diff, es ligeramente más rápido que la función "única" original en matlab. –

+0

¿qué tal algo similar para la matriz de células? decir, vector = {'a1', 'a1', 'b2'}; – user702846

Cuestiones relacionadas