Примечание
nominal и ordinal типы данных массива не рекомендуются. Для представления упорядоченных и неупорядоченных дискретных нечисловых данных используйте тип данных Категориальные массивы.
Часто полезно индексировать и искать данные по их категориям или группам. При сохранении категорий в виде меток внутри массива ячеек векторов символов или char массив, может быть трудно индексировать и искать категории. При использовании номинальных или порядковых массивов можно легко:
Элементы индекса из определенных категорий. Для номинальных и порядковых массивов можно использовать логические операторы == и ~= для индексации наблюдений, входящих или не входящих в определенную категорию. Для порядковых массивов, имеющих закодированный порядок, можно также использовать неравенства, >, >=, <, и <=, найти наблюдения в категориях выше или ниже конкретной категории.
Поиск членов категории. В дополнение к логическому оператору ==, вы можете использовать ismember для поиска наблюдений в конкретной группе.
Поиск элементов, не входящих в определенную категорию. Номинальные и порядковые массивы указывают, какие элементы не принадлежат к определенной категории по <undefined>. Вы можете использовать isundefined для поиска наблюдений, в которых отсутствует категория.
Удаление замечаний, относящихся к определенной категории. Логические операторы можно использовать для включения или исключения наблюдений из определенных категорий. Даже если удалить все наблюдения из категории, уровень категории остается определенным, если его не удалить с помощью droplevels.
В этом примере показано несколько распространенных методов индексирования и поиска.
Загрузите образцы данных.
load carsmall;Преобразовать char массив, Origin, в номинальный массив. Эта переменная содержит страну происхождения или производства для каждого образца автомобиля.
Origin = nominal(Origin);
Поиск наблюдений в категории. Определите, имеются ли в образце автомобили, произведенные в Канаде.
any(Origin=='Canada')ans = logical
0
Образцов автомобилей, производимых в Канаде, нет.
Перечислите страны, которые являются уровнями Origin.
getlevels(Origin)
ans = 1x6 nominal
France Germany Italy Japan Sweden USA
Элементы индекса, относящиеся к определенной категории. Постройте гистограмму измерений ускорения для автомобилей, произведенных в США.
figure(); histogram(Acceleration(Origin=='USA')) title('Acceleration of Cars Made in the USA')

Удаление замечаний, относящихся к определенной категории. Исключить все автомобили, изготовленные в Швеции, из Origin.
Origin = Origin(Origin~='Sweden'); any(ismember(Origin,'Sweden'))
ans = logical
0
Автомобили, сделанные в Швеции, удалены из Origin, но Sweden по-прежнему является уровнем Origin.
getlevels(Origin)
ans = 1x6 nominal
France Germany Italy Japan Sweden USA
Удалить Sweden от уровней Origin.
Origin = droplevels(Origin,'Sweden');
getlevels(Origin)ans = 1x5 nominal
France Germany Italy Japan USA
Проверка на наличие наблюдений, не относящихся к определенной категории. Получите индексы для автомобилей, сделанных во Франции.
ix = find(Origin=='France')ix = 4×1
11
27
39
61
Есть четыре машины из Франции. Удалить France от уровней Origin.
Origin = droplevels(Origin,'France');Возвращает предупреждение, указывающее на удаление уровня категории, содержащего элементы. Эти наблюдения больше не относятся к определенной категории, указанной undefined.
Origin(ix)
ans = 4x1 nominal
<undefined>
<undefined>
<undefined>
<undefined>
Вы можете использовать isundefined для поиска наблюдений с неопределенной категорией.
find(isundefined(Origin))
ans = 4×1
11
27
39
61
Эти показатели соответствуют наблюдениям, входившим в категорию France, до того, как эта категория была исключена из Origin.
droplevels | nominal | ordinal