如何检查单元格数组中的元素是唯一的还是重复的

bas*_*thi 2 matlab cell-array

我有一个<465x1>单元格数组.为了检查每个元素,我想检查它是唯一的还是重复的元素.

Eit*_*n T 5

使用unique用于此目的,它可以在电池阵列工作太:

[U, ic, iu] = unique(C);
Run Code Online (Sandbox Code Playgroud)

C你的细胞阵列在哪里.U是一个新的单元格数组,具有相同的值C但没有重复.然后,您可以使用histc以下方法计算每个值的出现次数:

[U, ic, iu] = unique(C);
count = histc(iu, 1:numel(ic)) 
Run Code Online (Sandbox Code Playgroud)

为了示例,我们首先生成一个字符串的随机单元格数组:

strings = {'foo'; 'bar'; 'baz'; 'bang'};
C = strings(ceil(numel(strings) * rand(6, 1)))
Run Code Online (Sandbox Code Playgroud)

这应该生成这样的东西:

C = 
    'bang'
    'baz'
    'foo'
    'bang'
    'bar'
    'foo'
Run Code Online (Sandbox Code Playgroud)

现在我们计算每个值的出现次数C:

C = strings(ceil(numel(strings) * rand(6, 1)));
[U, ic, iu] = unique(C);
count = histc(iu, 1:numel(ic))
Run Code Online (Sandbox Code Playgroud)

这应该导致:

U =
   'foo'
   'bar'
   'baz'
   'bang'

count =
    2
    1
    1
    2
Run Code Online (Sandbox Code Playgroud)

这意味着'foo''bang'重复两次,而剩下的只有一次,这是正确的.
如果您只对真正独特的价值感兴趣,您可以:

U(count == 1)
Run Code Online (Sandbox Code Playgroud)

哪个应该在我们的示例中返回:

'bar'
'baz'
Run Code Online (Sandbox Code Playgroud)

请注意,每个元素count代表相应的值U(不是strings,它们可能具有不同的顺序).