Delete double cell array entries

8 views (last 30 days)
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!

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 20 Mar 2013
Edited: Azzi Abdelmalek on 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 Comment
Antje
Antje on 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!

Sign in to comment.

More Answers (2)

Friedrich
Friedrich on 20 Mar 2013
Hi,
one line:
NewCellArray = cellfun(@str2num, unique(cellfun(@num2str, CellArray,'UniformOutput',false)),'UniformOutput',false)
  1 Comment
Antje
Antje on 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!

Sign in to comment.


Babak
Babak on 20 Mar 2013
CellArray={[1 2 3] [1 2] [3 5 6 7] [1 2] [2 4] };
NewCellArray = [CellArray(1:3) CellArray(5)];
  2 Comments
Antje
Antje on 21 Mar 2013
Yes, that's the problem. My cell array can have thousands of entries.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!