removing duplicates in an array

58 ビュー (過去 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 Center および File ExchangeGraphics Object Programming についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by