How to delete elements that have repeats in arrays

Hey, i'm working on a problem where i have to check an array and delete all the elements that appear more than once in it. This is not what the unique function does(it leaves one copy of the repeated element) and i'm not sure if there's a function that does this, any ideas?

1 Kommentar

Mickey
Mickey am 12 Aug. 2011
sorry i should have given an example:
input=
2,3,4,4,5,6,2,2
output=
3,5,6

Melden Sie sich an, um zu kommentieren.

Antworten (4)

Oleg Komarov
Oleg Komarov am 12 Aug. 2011
Your original question is actually different from what you're trying to accomplish.
To remove duplicate rows:
[unV,locA,locB] = unique(v,'rows');
v(locA(histc(locB,1:size(unV,1)) == 1),:)

1 Kommentar

[uv, ~ ,ui] = unique(v,'rows')
out = uv(histc(ui,1:max(ui))==1,:)

Melden Sie sich an, um zu kommentieren.

Walter Roberson
Walter Roberson am 12 Aug. 2011
For single row,
input= [2,3,4,4,5,6,2,2];
[b, i1] = unique(input,'first');
[b, i2] = unique(input,'last');
b(i1==i2);
For multi-rows, if it is unique rows you want to identify,
input = [2,3,4,5
7,3,7,8
2,4,2,1
2,3,4,5
5,6,3,2
2,3,4,5];
[b, i1] = unique(input, 'rows', 'first');
[b, i2] = unique(input, 'rows', 'last');
b(i1==i2,:)

1 Kommentar

That's a good one, Walter! I was thinking that it could be solved using unique() and setdiff() or setxor() but couldn't figure it out.

Melden Sie sich an, um zu kommentieren.

Friedrich
Friedrich am 12 Aug. 2011
Hi,
try this
input= [2,3,4,4,5,6,2,2];
un_in = unique(input);
n = hist(input,numel(un_in));
oputput = un_in(n==1)
Mickey
Mickey am 12 Aug. 2011
thanks, i should have given my example as a multiple row, multiple column array, but i figured it out anyway. here's what my answer looks like:
clear all
clc
v=[2,3,4,5
7,3,7,8
2,4,2,1
2,3,4,5
5,6,3,2
2,3,4,5];
j=0;
n_rows= size(v,1);% Find number of rows in matrix
for n = 1:n_rows %Check each row to see if is repeated
chk = ismember(v,v(n,:),'rows');% Find rows identical to row n
if sum(chk)>1
j=j+1;
rep(j)=n; %row n has repeats, so store its index
end
end
% Going in reverse order, ie from last row to first, delete repeat rows from array
for tmp=j:-1:1
y=rep(tmp);
v(y,:)=[];
end
v

Kategorien

Gefragt:

am 12 Aug. 2011

Community Treasure Hunt

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

Start Hunting!

Translated by