Filter löschen
Filter löschen

Delete double cell array entries

3 Ansichten (letzte 30 Tage)
Antje
Antje am 20 Mär. 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!

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 20 Mär. 2013
Bearbeitet: Azzi Abdelmalek am 20 Mär. 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 Kommentar
Antje
Antje am 21 Mär. 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!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Friedrich
Friedrich am 20 Mär. 2013
Hi,
one line:
NewCellArray = cellfun(@str2num, unique(cellfun(@num2str, CellArray,'UniformOutput',false)),'UniformOutput',false)
  1 Kommentar
Antje
Antje am 21 Mär. 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!

Melden Sie sich an, um zu kommentieren.


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

Melden Sie sich an, um zu kommentieren.

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by