如何删除单元格数组中的重复值

cat*_*cat 2 matlab char duplicates

我有这个cell数组char:

a={'1';'1';'1';'1';'1';'3';'3';'3';'3';'3';'3';'4';'4';'4';'4'};
Run Code Online (Sandbox Code Playgroud)

我想把它变成这个:

a={'1';'';'';'';'';'3';'';'';'';'';'';'4';'';'';''};
Run Code Online (Sandbox Code Playgroud)

zee*_*eez 10

首先,找到a它们的第一个索引的独特元素.然后设置的所有其他条目a来''.

[~, ii] = unique(a);
ind = setdiff(1:numel(a), ii);
[a{ind}] = deal('');
Run Code Online (Sandbox Code Playgroud)

正如CST-Link所指出的,重复索引的计算和空字符串的分配都可以加速(特别setdiff是很慢):

[~, ii] = unique(a);
ind = 1:numel(a);
ind(ii) = [];
a(ind) = {''};
Run Code Online (Sandbox Code Playgroud)

  • 你可以用'[〜,ii] =唯一(a)来加快速度; ind = 1:numel(a); ind(ii)= []; a(ind)= {''};` (3认同)

小智 5

这对于大型阵列来说可能很快:

a=repmat({'1';'1';'1';'1';'1';'3';'3';'3';'3';'3';'3';'4';'4';'4';'4'}, 100000, 1);

[u,n] = unique(flipud(a));
b = repmat({''}, size(a));
b(n) = u;
a = flipud(b);
Run Code Online (Sandbox Code Playgroud)