removing duplicates in an array

60 Ansichten (letzte 30 Tage)
Esegboria Osarhemen
Esegboria Osarhemen am 3 Mär. 2019
Bearbeitet: Brent F am 10 Jun. 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]

Akzeptierte Antwort

Stephan
Stephan am 3 Mär. 2019
b = a(logical([1 (diff(a)~=0)]))
  2 Kommentare
Esegboria Osarhemen
Esegboria Osarhemen am 3 Mär. 2019
Thanks
Jan
Jan am 4 Mär. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Brent F
Brent F am 10 Jun. 2021
Bearbeitet: Brent F am 10 Jun. 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

Kategorien

Mehr zu Graphics Object Programming finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by