Hi matlab community,
Say i have the matrix:
a = [1 2 2 3 2 4 5 6 7 8 6]
and i want delete all repetation number there, so i want like this result:
a = [1 3 4 5 7 8]
you can see, i want remove number 2 and 6..how to solve it?
and another problem (if we work with big array).. say i have information that repeat number are 2 and 6, any suggestions for a looping construct? below looping is fail!
repeat=[2;6];
a = [1 2 2 3 2 4 5 6 7 8 6]
for i=1:length(repeat)
a(a==a(repeat(i)))=[]
end
from these looping, will result:
a =
1 3 4 5 6 8 6
you can see, that result still produce repeat number, namely 6. .tks community :)

 채택된 답변

Jan
Jan 2022년 6월 1일

0 개 추천

% Your code
repeat=[2;6];
a = [1 2 2 3 2 4 5 6 7 8 6]
for i=1:length(repeat)
a(a==a(repeat(i)))=[]
end
A small modification solves the promlem:
for i=1:length(repeat)
a(a == repeat(i)) = [];
% not a(repeat(i)) !
end
Or easier:
a(ismember(a, [2,6])) = []
or
a = setdiff(a, [2,6], 'stable')

댓글 수: 1

eko supriyadi
eko supriyadi 2022년 6월 1일
tks jan for your effort, included in 2 solutions too

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

추가 답변 (4개)

Stephen23
Stephen23 2022년 6월 1일

3 개 추천

a = [1,2,2,3,2,4,5,6,7,8,6];
[c,x] = histc(a,unique(a));
a(c(x)>1) = []
a = 1×6
1 3 4 5 7 8
Bruno Luong
Bruno Luong 2022년 6월 1일

2 개 추천

a = [1 2 2 3 2 4 5 6 7 8 6]
a = 1×11
1 2 2 3 2 4 5 6 7 8 6
[u,~,j]=unique(a);
a(ismember(a,u(accumarray(j,1)>1)))=[]
a = 1×6
1 3 4 5 7 8

댓글 수: 1

Jan
Jan 2022년 6월 1일
편집: Jan 2022년 6월 1일
Or with omitting ismember:
a = [17 2 2 3 2 4 5 6 7 8 6];
[~, ~, ic] = unique(a);
mult = (accumarray(ic, 1) <= 1);
as = a(mult(ic))
as = 1×6
17 3 4 5 7 8

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

KSSV
KSSV 2022년 6월 1일

0 개 추천

REad about unique.
a = [1 2 2 3 2 4 5 6 7 8 6]
a = 1×11
1 2 2 3 2 4 5 6 7 8 6
iwant = unique(a)
iwant = 1×8
1 2 3 4 5 6 7 8

댓글 수: 1

no no i want delete all repetation number..
so i will produce:
a = [1 3 4 5 7 8]

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

Jan
Jan 2022년 6월 1일

0 개 추천

a = [1 2 2 3 2 4 5 6 7 8 6];
[S, idx] = sort(a(:).');
m = [false, diff(S) == 0];
ini = strfind(m, [false, true]);
m(ini) = true; % Mark 1st occurence in addition
T(idx) = m; % TRUE for multiple occurences
b = a(~T)
b = 1×6
1 3 4 5 7 8

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

릴리스

R2021a

질문:

2022년 6월 1일

댓글:

2022년 6월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by