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

标签 matlab

有没有很好的功能可以删除单元格数组中的重复条目?

一些谷歌搜索抛出了函数“唯一”,但似乎只有在数组的所有条目都是字符串的情况下才起作用。我的是2x2矩阵。

谢谢

最佳答案

我使用了CELLFUNCELL2MATUNIQUE的组合。想法是将每个矩阵转换为 vector ,将这些单元格数组转换为矩阵并应用唯一,结果可以使用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')

关于matlab - 如何删除单元格数组中的重复条目(当这些条目是2x2矩阵时)(Matlab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734138/

相关文章:

matlab - 了解 Matlab 模式识别神经网络图

matlab - Mablab/Octave - 使用 cellfun 将一个矩阵与另一个矩阵建立索引

matlab - 抑制图形刻度中的指数格式

Matlab: 0 < NaN = 0

matlab - MATLAB 中的条件 "Or"语句

matlab - Octave 找不到函数句柄

python - 从 Matlab 到 Python 代码 [z,index]=sort(abs(z));

matlab - 矩阵长度的目的

matlab - 成本函数,sum(x)和ones(1,length(x)) *x有什么区别?

matlab - 用扭曲的时基拟合正弦波