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{:})
李>