Remove duplicates and original also

11 次查看(过去 30 天)
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 个评论
Declan Bourke
Declan Bourke 2016-8-8
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

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2016-8-5
编辑:Stephen23 2016-8-8
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

更多回答(2 个)

Azzi Abdelmalek
Azzi Abdelmalek 2016-8-5
A = [1,2,2,2,3,3,3,4,5]
b=unique(A,'stable')
c=hist(A,b)
B=b(c==1)
  2 个评论
Stephen23
Stephen23 2016-8-5
编辑:Stephen23 2016-8-5
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.

请先登录,再进行评论。


Azzi Abdelmalek
Azzi Abdelmalek 2016-8-5
编辑:Azzi Abdelmalek 2016-8-5
[ii,jj,kk]=unique(A)
out=ii(accumarray(kk,1)==1)

类别

Help CenterFile Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by