более быстрый способ достижения unique () в Matlab, если предполагается, 1d предварительно отсортированный вектор? - PullRequest
6 голосов
/ 18 ноября 2011

Мне повезло, и я нашел способ достичь intersect () быстрее при переполнении стека с предварительно отсортированным 1d вектором, так что я надеюсь на такую ​​же удачу для unique ();)

Почти 1/4 моего времени выполнения расходуется с помощью unique (). Я хотел бы ускорить это, и я могу предположить, что это 1d предварительно отсортированный вектор. Есть ли какие-либо другие низкоуровневые функции, которые я могу использовать напрямую, чтобы ускорить это?

1 Ответ

7 голосов
/ 18 ноября 2011

Вы можете просто использовать diff, чтобы проверить, совпадают ли последовательные элементы.

vector = [1 2 3 4 4 5];

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

uniqueVector =
     1     2     3     4     5
...