Delete double cell array entries

4 ビュー (過去 30 日間)
Antje
Antje 2013 年 3 月 20 日
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 日
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 日
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 日
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.

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

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by