2014-09-24 3 views
2

Давайте предположим, что у меня есть массив, array1, следующим образом:Альтернативы «уникальной» функции при поиске индексов уникальных значений (Matlab)

array1 = [1 2 2 2 3 3 4 4 4 5]; 

Я пытаюсь найти первый Значение индекса каждого из уникальных значений в этом массиве. Это довольно легко сделать с unique функции:

[~,uniqueIndex,~] = unique(array1,'first') 

который производит ожидаемый результат:

uniqueIndex = 
    1  2  5  7 10 

Мне нужно выполнить это действие на тысячи очень больших массивов и функция unique доказала свою быть огромным узким местом в моем коде. Мне было интересно, есть ли альтернативы, которые я мог бы использовать для достижения того же конечного результата (т. Е. Переменная uniqueIndex), но с меньшим воздействием на производительность.

EDIT: массивы отсортированы и содержат целые числа.

+1

Это может помочь немного узнать о рассматриваемых массивах. Они содержат целые числа? Они уже отсортированы? – MrAzzaman

+0

@ MrAzzaman Они массивы содержат целые числа и уже отсортированы – Alarik

ответ

4

Поскольку мы знаем, что массивы уже отсортированы, мы можем пропустить некоторые проверки, выполняемые функцией MATLAB unique. Метод, который MATLAB использует внутренне следующим образом (за вычетом проверки)

n = 1:numel(array1); 
d = [true,diff(array1)~=0]; 
uniqueIndex = n(d); 

Это должно ускорить ваш код по крайней мере немного.

Смежные вопросы