Заменить дубликаты элементов вектора на 0 (Matlab / Octave) - PullRequest
0 голосов
/ 01 апреля 2012

Я хочу заменить повторяющиеся элементы из вектора на 0 и сохранить только первое вхождение.

Если у меня есть такой вектор, как

[1 1 2 2 2 3 3 3 44 4 4 5 5 5 5 6 6 6]

как я могу преобразовать его в

[1 0 2 0 0 3 0 0 4 0 0 0 5 0 0 0 6 0 0]?

Спасибо.

1 Ответ

3 голосов
/ 01 апреля 2012
a = [ 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 5 6 6 6 ];    
[c, ia] = unique(a, 'first');
t = a;
t(ia) = 0;
filtered_vect = a - t;

edit: что более кратко, уничтожив исходный вектор:

a = [ 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 5 6 6 6 ];    
[c, ia] = unique(a, 'first');
a(~ismember(1:length(a),ia)) = 0;
...