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

时间:2017-02-01 10:50:43

标签: 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

如果A中的所有元素都在行向量中,我可以像[A{:}]那样使用:

U = unique([A{1:3}]);

返回:

U =
 1     2     3

但在我的情况下,它会引发异常:

  

使用horzcat时出错

     

连接的矩阵的尺寸不是   是一致的。

那我怎么能避免那个for-loop?

2 个答案:

答案 0 :(得分:3)

您可以使用 $("#txtcountry").val(""); 重塑单元格中的所有元素。

NSString *passwordRegex = @"^.*(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$!&]).*$";
NSPredicate *passwordPred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passwordRegex];

if (![passwordPred evaluateWithObject:passwordTF.text]) {
    [self.view makeToast:@"Password must be at least 6 character, containing lowercase letter, one uppercase letter, digits, and special character (!@#$&)" duration:2.0 position:@"bottom"];
}

或避免cellfun

U = unique(cell2mat(cellfun(@(x)reshape(x,1,numel(x)),A, 'UniformOutput', false)));

答案 1 :(得分:3)

我们可以这样:

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