используя «уникальный» в Matlab, сохраняя первый случай - PullRequest
3 голосов
/ 28 марта 2011

привет всем, у меня есть данные, которые иногда выглядят так:
время ... вкл / выкл ... значение
50 ...... 1 ......... 70
50 ...... 0 ......... 70
50 ...... 1 ......... 70

Я хочуудалите дубликат строки «вкл», но также и строку «выкл», потому что она избыточна, а начинать с «выкл» плохо для моего сценария.

Кажется, что «первый» аргументс уникальным должен помочь, но я не испытываю радости.

Есть предложения?

1 Ответ

2 голосов
/ 28 марта 2011

Используйте уникальное с аргументом 'rows' вместо 'first', чтобы удалить дубликат 'on'. Чтобы убрать «выкл», простое решение - сначала установить «все», а затем использовать уникальный.

A = [50 1 70; 50 0 70; 50 1 70]
A =

    50     1    70
    50     0    70
    50     1    70

A(:,2) = 1 %Set all on/off values to 'on'

A =

    50     1    70
    50     1    70
    50     1    70

R = unique(A,'rows')

R =

    50     1    70

РЕДАКТИРОВАТЬ: Чтобы удалить отключенную строку только тогда, когда две соседние строки равны, необходимо сравнить соседние строки. Есть много способов сделать это, но вот один для общей Nx3 матрицы, которую я сделал быстро

rows = 2:length(A)-1;
p=find(all(A(rows+1,:)==A(rows-1,:),2)); %Get index of where rows are equal
A(rows(p),2) = 1; Set those rows to be 'on', so they can be removed by unique
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...