Как проверить, является ли элемент в массиве ячеек уникальным или повторяющимся

У меня есть массив ячеек ‹465x1>. Для проверки каждого элемента я хочу проверить, является ли он уникальным или повторяющимся элементом.


person baswaswathi    schedule 27.12.2012    source источник


Ответы (1)


Используйте для этой цели unique, он также может работать с массивами ячеек:

[U, ic, iu] = unique(C);

Где C — ваш массив ячеек. U — это новый массив ячеек с теми же значениями, что и C, но без повторений. Затем вы можете подсчитать количество вхождений каждого значения, используя histc:

[U, ic, iu] = unique(C);
count = histc(iu, 1:numel(ic)) 

Пример

Для примера давайте сначала сгенерируем случайный массив ячеек строк:

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

Это должно сгенерировать что-то вроде этого:

C = 
    'bang'
    'baz'
    'foo'
    'bang'
    'bar'
    'foo'

Теперь мы подсчитываем вхождения каждого значения в C:

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

Это должно привести к:

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

count =
    2
    1
    1
    2

это означает, что 'foo' и 'bang' повторяются дважды, а остальные только один раз, что правильно.
Если вас интересуют только действительно уникальные значения, вы можете сделать:

U(count == 1)

Что должно вернуться в нашем примере:

'bar'
'baz'

Обратите внимание, что каждый элемент в count представляет соответствующее значение в U (не strings, они могут иметь другой порядок).

person Eitan T    schedule 27.12.2012
comment
Хорошее объяснение, обратите внимание, что вы также можете найти действительно уникальные значения без find, используя U(count==1) - person Dennis Jaheruddin; 27.12.2012