Matlab 如何获得矩阵单元格数组中的所有唯一值?

Matlab 如何获得矩阵单元格数组中的所有唯一值?,matlab,matrix,vectorization,cell-array,Matlab,Matrix,Vectorization,Cell Array,我想获得A中的所有唯一值,其中A是不同形状和大小矩阵的单元格数组: A = {[], 1, [2 3], [4 5; 6 7]}; U = []; for ii = 1: numel(A) a = A{ii}; U = [U; a(:)]; end U = unique(U); 这将返回: U = 1 2 3 4 5 6 7 U = 1 2 3 如果Awhere行向量中的所有元素,我可以使用[A{:}]如下

我想获得
A
中的所有唯一值,其中
A
是不同形状和大小矩阵的单元格数组:

A = {[], 1, [2 3], [4 5; 6 7]};
U = [];
for ii = 1: numel(A)
    a = A{ii};
    U = [U; a(:)];
end
U = unique(U);
这将返回:

U =
 1     2     3     4     5     6     7
U =
 1     2     3
如果
A
where行向量中的所有元素,我可以使用
[A{:}]
如下:

U = unique([A{1:3}]);
这将返回:

U =
 1     2     3     4     5     6     7
U =
 1     2     3
但在我的例子中,它抛出了一个异常:

使用horzcat时出错

被连接的矩阵的维数不相同 始终如一


那么,如何避免循环出现这种情况呢?

您可以使用
cellfun
来重塑单元格中的所有元素

U = unique(cell2mat(cellfun(@(x)reshape(x,1,numel(x)),A, 'UniformOutput', false)));
或者避免使用

U = unique(cell2mat(cellfun(@(x)x(:).',A, 'UniformOutput', false)));

您可以使用
cellfun
重塑单元格中的所有元素

U = unique(cell2mat(cellfun(@(x)reshape(x,1,numel(x)),A, 'UniformOutput', false)));
或者避免使用

U = unique(cell2mat(cellfun(@(x)x(:).',A, 'UniformOutput', false)));
我们可以这样做:

A = {[], 1, [2 3], [2 0; 4 5; 6 7]};
AA = cellfun( @(x) unique(x(:)), A, 'UniformOutput' , false)
res = unique(cat(1, AA{:}))
  • 首先,为每个单元格创建唯一的数组-这样可以避免将所有单元格转换为仅具有唯一值的数值
  • 让我们将单元格数组转换为一个数值数组-
    cat(1,AA{:})
  • 通过此结果数组查找唯一值
  • 我们可以这样做:

    A = {[], 1, [2 3], [2 0; 4 5; 6 7]};
    AA = cellfun( @(x) unique(x(:)), A, 'UniformOutput' , false)
    res = unique(cat(1, AA{:}))
    
  • 首先,为每个单元格创建唯一的数组-这样可以避免将所有单元格转换为仅具有唯一值的数值
  • 让我们将单元格数组转换为一个数值数组-
    cat(1,AA{:})
  • 通过此结果数组查找唯一值