removing duplicates in an array

조회 수: 69 (최근 30일)
Esegboria Osarhemen
Esegboria Osarhemen 2019년 3월 3일
편집: Brent F 2021년 6월 10일
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]

채택된 답변

Stephan
Stephan 2019년 3월 3일
b = a(logical([1 (diff(a)~=0)]))
  댓글 수: 2
Esegboria Osarhemen
Esegboria Osarhemen 2019년 3월 3일
Thanks
Jan
Jan 2019년 3월 4일
(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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Brent F
Brent F 2021년 6월 10일
편집: Brent F 2021년 6월 10일
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

카테고리

Help CenterFile Exchange에서 Calculus에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by