so i'm having trouble trying to eliminate repetitions from my arrays. i've been using unique but can't have the first instance of the element in the return. for example:
A = 1,2,2,2,3,3,3,4,5; B = unique(A); B = 1,2,3,4,5
what i'm actually looking for is B = 1,4,5 where even the first instance of repeating elements is taken out. is this possible?
Thanks

2 commentaires

Declan Bourke
Declan Bourke le 8 Août 2016
Hi,
And could i ask quickly, is there any way to do the same with an array of strings? e.g. (AA,AB,AC,AA,AD). I've tried everything I can think of.
Thanks,
Declan

Connectez-vous pour commenter.

 Réponse acceptée

Stephen23
Stephen23 le 5 Août 2016
Modifié(e) : Stephen23 le 8 Août 2016
Assuming that the vector A is sorted:
>> A = [1,2,2,2,3,3,3,4,5];
>> B = unique(A);
>> B(histc(A,B)<2)
ans =
1 4 5
If A is not sorted, then this is a bit more complicated:
>> A = [3,3,3,5,1,4,2,2,2,2];
>> [B,X] = unique(A);
>> Y = histc(A,B)<2;
>> A(sort(X(Y))) % in original order
ans =
5 1 4
>> A(X(Y)) % sorted
ans =
1 4 5

Plus de réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 5 Août 2016
A = [1,2,2,2,3,3,3,4,5]
b=unique(A,'stable')
c=hist(A,b)
B=b(c==1)

2 commentaires

Declan Bourke
Declan Bourke le 5 Août 2016
Thanks for the help!
Stephen23
Stephen23 le 5 Août 2016
Modifié(e) : Stephen23 le 5 Août 2016
This does not work if A is not sorted into order:
>> A = [3,3,3,5,1,4,2,2,2,2];
>> b=unique(A,'stable');
>> c=hist(A,b)
Error using histc
Edge vector must be monotonically non-decreasing.
Error in hist (line 92)
nn = histc(y,edges,1);
Although beginners might think that the 'stable' makes a difference, this then provides a non-monotonic sequence to histc, which is not allowed.

Connectez-vous pour commenter.

Azzi Abdelmalek
Azzi Abdelmalek le 5 Août 2016
Modifié(e) : Azzi Abdelmalek le 5 Août 2016
[ii,jj,kk]=unique(A)
out=ii(accumarray(kk,1)==1)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by