Effacer les filtres
Effacer les filtres

How to delete the duplicate number or using unique in the cell?

1 vue (au cours des 30 derniers jours)
Hang Vu
Hang Vu le 14 Mai 2019
Commenté : Hang Vu le 14 Mai 2019
Let's see if I have A:
A={[3];[6 8 3];[5];[10 5]}
I am trying to delete the duplicate numbers and found that 'unique' can return the array without the duplication.
Is there any way that I can use unique or delete the duplicate to my cell structure? result like this for example:
A={[3];[6 8];[5];[10]}

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 14 Mai 2019
A={[3];[6 8 3];[5];[10 5]};
k = repelem((1:numel(A))',cellfun(@numel,A));
B = cell2mat(cellfun(@(x)x(:),A,'un',0));
[a,b] = unique(B,'stable');
out = accumarray(k(b),a,[],@(x){x(:)'});
  2 commentaires
Hang Vu
Hang Vu le 14 Mai 2019
Thank you! it's perfect.^^
Hang Vu
Hang Vu le 14 Mai 2019
It has a problem:
A={[3];[6 8];[5 10];[10]};
k = repelem((1:numel(A))',cellfun(@numel,A));
B = cell2mat(cellfun(@(x)x(:),A,'un',0));
[a,b] = unique(B,'stable');
A= accumarray(k(b),a,[],@(x){x(:)'})
A{:}
it may return 3x1 cell array in this case.
A =
3×1 cell array
{[ 3]}
{1×2 double}
{1×2 double}
ans =
3
ans =
6 8
ans =
5 10
Could you please help to return the last cell with [] , mean A still has 4x1 cell array
A={[3];[6 8];[5 10];[]}

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by