Delete double cell array entries

3 vues (au cours des 30 derniers jours)
Antje
Antje le 20 Mar 2013
How can I delete double entries in a cell array? I don't want to use a loop. For example I have:
CellArray={[1 2 3] [1 2] [3 5 6 7] [1 2] [2 4] }
And as a result I want to get this:
NewCellArray={[1 2 3] [1 2] [3 5 6 7] [2 4] }
Thank you very much and have a nice day!

Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 20 Mar 2013
Modifié(e) : Azzi Abdelmalek le 20 Mar 2013
CellArray={[1 2 3] [1 2] [3 5 6 7] [1 2] [2 4] };
m=max(cellfun(@numel,CellArray));
v=cellfun(@(x) [x inf(1,m-numel(x))],CellArray,'un',0);
[~,ii]=unique(cell2mat(v'),'rows');
CellArray=CellArray(ii)
  1 commentaire
Antje
Antje le 21 Mar 2013
This solution works really fine and fast! Time needed for my loop: 1.24 seconds Time needed with the one line solution from Friedrich below: 0.3 seconds Time needed with your solution: 0.07 seconds! :) Thanks so much!

Connectez-vous pour commenter.

Plus de réponses (2)

Friedrich
Friedrich le 20 Mar 2013
Hi,
one line:
NewCellArray = cellfun(@str2num, unique(cellfun(@num2str, CellArray,'UniformOutput',false)),'UniformOutput',false)
  1 commentaire
Antje
Antje le 21 Mar 2013
This solution works very good and I like that it is only one line. But in my case I prefer the faster solution from above. Thank you!

Connectez-vous pour commenter.


Babak
Babak le 20 Mar 2013
CellArray={[1 2 3] [1 2] [3 5 6 7] [1 2] [2 4] };
NewCellArray = [CellArray(1:3) CellArray(5)];
  2 commentaires
Azzi Abdelmalek
Azzi Abdelmalek le 20 Mar 2013
CellArray is just an example, I guess his array is much bigger.
Antje
Antje le 21 Mar 2013
Yes, that's the problem. My cell array can have thousands of entries.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by