removing duplicates in an array

48 vues (au cours des 30 derniers jours)
Esegboria Osarhemen
Esegboria Osarhemen le 3 Mar 2019
Modifié(e) : Brent F le 10 Juin 2021
If i have the following array
a =[1,1,1,2,2,1,1,6,6,6,8,8,2,2,3,3,2,2]
When i do unique(a,'stable'), i get
[1,2,6,8,3]
I want the following result
[1,2,1,6,8,2,3,2]

Réponse acceptée

Stephan
Stephan le 3 Mar 2019
b = a(logical([1 (diff(a)~=0)]))
  2 commentaires
Esegboria Osarhemen
Esegboria Osarhemen le 3 Mar 2019
Thanks
Jan
Jan le 4 Mar 2019
(diff(a)~=0) is a logical vector. Concatenating it with a double converts it to a double. Casting it by logical() converts it again. More efficient:
b = a([true, diff(a)~=0])
Now the values are not converted twice.

Connectez-vous pour commenter.

Plus de réponses (1)

Brent F
Brent F le 10 Juin 2021
Modifié(e) : Brent F le 10 Juin 2021
Using @Jan's idea, but:
  • Package as a function
  • Handle case where column-vector is given (return in same format as given)
function [uniqueSequence] = DedupSequence (seq)
% Eliminate sequentially repeated rows
% Create row vector for diff (must transpose if given a column vector)
if size(seq,1) > 1
seqCopy = seq(:,1)';
else
seqCopy = seq;
end
uniqueSequence = seq([true, diff(seqCopy)~=0]);
end

Catégories

En savoir plus sur Graphics Object Programming dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by