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

1 visualizzazione (ultimi 30 giorni)
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]}

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 14 Mag 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 Commenti
Hang Vu
Hang Vu il 14 Mag 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];[]}

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Data Types in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by