如何删除单元格数组中的重复条目(当这些条目是2x2矩阵时)(Matlab)

时间:2012-01-04 21:14:46

标签: matlab

是否有一个很好的函数可以删除单元格数组中的重复条目?

一些谷歌搜索引发了“独特”功能,但似乎只有在数组的所有条目都是字符串时才有效。我的是2x2矩阵。

由于

1 个答案:

答案 0 :(得分:1)

我使用了CELLFUNCELL2MATUNIQUE的组合。我们的想法是将每个矩阵转换为一个向量,将这些单元格数组转换为矩阵并应用唯一的结果。您可以使用NUM2CELL将结果转换回单元格数组。

x = {[1 2; 3 4], [1 2; 3 4], [5 6; 7 8], [1 2; 3 4], [5 6; 7 8]}';
x1 = cellfun(@(y)y(:)', x, 'UniformOutput',0);
x2 = cell2mat(x1);
x3 = unique(x2,'rows');
x4 = num2cell(x3,2);
x5 = cellfun(@(y) reshape(y,2,2), x4, 'UniformOutput',0);

可能用较少的步骤完成。

重要的是要记住,只有当所有单元格数组元素具有相同的大小时,此代码才有效。

您可以使用

检查此情况
assert(size(unique(cell2mat(cellfun(@size,x,'UniformOutput',0))),1) == 1,...
       'Cell elements have different size')