MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#">ここ</a>」をクリックしてください。

Hang Vu
0

How to delete the duplicate number or using unique in the cell?

Hang Vu
さんによって質問されました 2019 年 5 月 14 日
最新アクティビティ Hang Vu
さんによって コメントされました 2019 年 5 月 14 日
Let's see if I have A:
A={[3];[6 8 3];[5];[10 5]}
I am trying to delete the duplicate numbers and found that 'unique' can return the array without the duplication.
Is there any way that I can use unique or delete the duplicate to my cell structure? result like this for example:
A={[3];[6 8];[5];[10]}

  0 件のコメント

サインイン to comment.

1 件の回答

回答者: Andrei Bobrov
2019 年 5 月 14 日
 採用された回答

A={[3];[6 8 3];[5];[10 5]};
k = repelem((1:numel(A))',cellfun(@numel,A));
B = cell2mat(cellfun(@(x)x(:),A,'un',0));
[a,b] = unique(B,'stable');
out = accumarray(k(b),a,[],@(x){x(:)'});

  2 件のコメント

Thank you! it's perfect.^^
It has a problem:
A={[3];[6 8];[5 10];[10]};
k = repelem((1:numel(A))',cellfun(@numel,A));
B = cell2mat(cellfun(@(x)x(:),A,'un',0));
[a,b] = unique(B,'stable');
A= accumarray(k(b),a,[],@(x){x(:)'})
A{:}
it may return 3x1 cell array in this case.
A =
3×1 cell array
{[ 3]}
{1×2 double}
{1×2 double}
ans =
3
ans =
6 8
ans =
5 10
Could you please help to return the last cell with [] , mean A still has 4x1 cell array
A={[3];[6 8];[5 10];[]}

サインイン to comment.



Translated by