2015-09-03 2 views
2

У меня есть следующий вектор a:Удалить соседние повторяющиеся термины

a=[8,8,9,9,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8] 

От a Я хочу, чтобы удалить все "смежные" повторы, чтобы получить:

b=[8,9,1,2,3,4,5,6,7,8] 

Однако, когда я делаю:

unique(a,'stable') 

ans = 

    8  9  1  2  3  4  5  6  7 

Вы видите, unique только действительно получает уникальных элементов a, тогда как я хочу удалить «дубликаты» ... Как это сделать?

+0

так ответ вам помог? –

+0

Да, извините за отсутствие маркировки, как ответили. –

+0

уверен, что мне было интересно, помогло ли оно спасибо :) –

ответ

4

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

Вот код:

a =[8,8,9,9,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8] 

F=find(diff([a(1)-1, a])); 

С diff(a) возвращает массив длины (длина (а) -1), мы хотим, чтобы добавить значение в начале (т.е. a(1)), чтобы получить вектор такого же размера, как a. Здесь мы вычитаем 1 так, что, как упоминалось в @surgical_tubing, команда find эффективно находит ее, потому что она ищет ненулевые элементы, поэтому мы хотим убедиться, что значение не равно нулю.

Следовательно diff([a(1)-1, a]) выглядит следующим образом:

Columns 1 through 8 

    1  0  1  0 -8  0  1  0 

    Columns 9 through 16 

    1  0  1  0  1  0  1  0 

    Columns 17 through 20 

    1  0  1  0 

Теперь, найдя повторяющиеся элементы, индексируемых обратно в a с позициями найденных find:

newa=a(F) 

и выход:

newa = 

    Columns 1 through 8 

    8  9  1  2  3  4  5  6 

    Columns 9 through 10 

    7  8 
+0

Выглядит отлично, я хотел бы спросить, есть ли какая-то конкретная причина использовать -1, когда вы добавляете 'a (1) -1'? Я понимаю, что это позволяет записывать первый элемент. –

+3

Нет ничего особенного в -1. Это просто должно быть любое значение, которое НЕ 'a (1)', чтобы заставить diff найти его. –

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