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!

 採用された回答

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 3 月 20 日
編集済み: Azzi Abdelmalek 2013 年 3 月 20 日

0 投票

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 件のコメント

Antje
Antje 2013 年 3 月 21 日
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!

サインインしてコメントする。

その他の回答 (2 件)

Friedrich
Friedrich 2013 年 3 月 20 日

0 投票

Hi,
one line:
NewCellArray = cellfun(@str2num, unique(cellfun(@num2str, CellArray,'UniformOutput',false)),'UniformOutput',false)

1 件のコメント

Antje
Antje 2013 年 3 月 21 日
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!

サインインしてコメントする。

Babak
Babak 2013 年 3 月 20 日

0 投票

CellArray={[1 2 3] [1 2] [3 5 6 7] [1 2] [2 4] };
NewCellArray = [CellArray(1:3) CellArray(5)];

2 件のコメント

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 3 月 20 日
CellArray is just an example, I guess his array is much bigger.
Antje
Antje 2013 年 3 月 21 日
Yes, that's the problem. My cell array can have thousands of entries.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File Exchange で Data Types についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by