Часто полезно выбирать данные на основе их значений. Этот тип выбора данных может включать в себя создание логического вектора на основе значений в одной переменной, а затем использование этого логического вектора для выбора подмножества значений в других переменных. Можно создать логический вектор для выбора данных, найдя значения в числовом массиве, попадающие в определенный диапазон. Кроме того, можно создать логический вектор, найдя определенные дискретные значения. При использовании категориальных массивов можно легко:
Выберите элементы из определенных категорий. Для категориальных массивов используйте логические операторы == или ~= для выбора данных, входящих или не входящих в определенную категорию. Для выбора данных в определенной группе категорий используйте ismember функция.
Для порядковых категориальных массивов используйте неравенства >, >=, <, или <= для поиска данных в категориях выше или ниже определенной категории.
Удаление данных, относящихся к определенной категории. Используйте логические операторы для включения или исключения данных из определенных категорий.
Поиск элементов, не входящих в определенную категорию. Категориальные массивы указывают, какие элементы не принадлежат к определенной категории по <undefined>. Используйте isundefined для поиска наблюдений без определенного значения.
В этом примере показано, как индексировать и искать с помощью категориальных массивов. Доступ к данным можно получить, используя категориальные массивы, хранящиеся в таблице аналогичным образом.
Загрузить данные образца
Загрузка выборочных данных, собранных от 100 пациентов.
load patients
whosName Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 11412 cell Height 100x1 800 double LastName 100x1 11616 cell Location 100x1 14208 cell SelfAssessedHealthStatus 100x1 11540 cell Smoker 100x1 100 logical Systolic 100x1 800 double Weight 100x1 800 double
Создание категориальных массивов из массивов ячеек векторов символов
Gender и Location содержат данные, относящиеся к категориям. Каждый массив ячеек содержит векторы символов, взятые из небольшого набора уникальных значений (указывающих два пола и три местоположения соответственно). Новообращенный Gender и Location к категориальным массивам.
Gender = categorical(Gender); Location = categorical(Location);
Поиск участников одной категории
Для категориальных массивов можно использовать логические операторы == и ~= для поиска данных, входящих или не входящих в определенную категорию.
Определите, есть ли какие-либо пациенты, наблюдаемые в этом месте, 'Rampart General Hospital'.
any(Location=='Rampart General Hospital')ans = logical
0
Пациентов в больнице общего профиля Рампарт не наблюдается.
Поиск участников группы категорий
Вы можете использовать ismember для поиска данных в определенной группе категорий. Создайте логический вектор для пациентов, наблюдаемых в County General Hospital или VA Hospital.
VA_CountyGenIndex = ... ismember(Location,{'County General Hospital','VA Hospital'});
VA_CountyGenIndex является логическим массивом «100 на 1», содержащим логический true (1) для каждого элемента в категориальном массиве Location который является членом категории County General Hospital или VA Hospital. Выходные данные, VA_CountyGenIndex содержит 76 ненулевых элементов.
Используйте логический вектор, VA_CountyGenIndex для выбора LastName пациентов, наблюдаемых при County General Hospital или VA Hospital.
VA_CountyGenPatients = LastName(VA_CountyGenIndex);
VA_CountyGenPatients является массивом ячеек 76 на 1 символьных векторов.
Выбор элементов в определенной категории для печати
Используйте summary функция для печати сводки, содержащей имена категорий и количество элементов в каждой категории.
summary(Location)
County General Hospital 39
St. Mary's Medical Center 24
VA Hospital 37
Location представляет собой категориальный массив «100 на 1» с тремя категориями. County General Hospital встречается в 39 элементах, St. Mary s Medical Center в 24 элементах, и VA Hospital в 37 элементах.
Используйте summary функция для печати сводки Gender.
summary(Gender)
Female 53
Male 47
Gender представляет собой категориальный массив «100 на 1» с двумя категориями. Female встречается в 53 элементах и Male встречается в 47 элементах.
Использовать логический оператор == доступ к возрасту только пациентов женского пола. Затем постройте гистограмму этих данных.
figure() histogram(Age(Gender=='Female')) title('Age of Female Patients')

histogram(Age(Gender=='Female')) строит графики возрастных данных для 53 пациенток.
Удаление данных из определенной категории
Для включения или исключения данных из определенных категорий можно использовать логические операторы. Удалить всех пациентов, наблюдаемых в VA Hospital из переменных рабочей области, Age и Location.
Age = Age(Location~='VA Hospital'); Location = Location(Location~='VA Hospital');
Сейчас, Age является числовым массивом 63 на 1, и Location является категориальным массивом 63 на 1.
Перечислить категории Location, а также количество элементов в каждой категории.
summary(Location)
County General Hospital 39
St. Mary's Medical Center 24
VA Hospital 0
Пациенты, наблюдаемые в VA Hospital удалены из Location, но VA Hospital по-прежнему является категорией.
Используйте removecats функция для удаления VA Hospital из категорий Location.
Location = removecats(Location,'VA Hospital');Убедитесь, что категория, VA Hospital, был удален.
categories(Location)
ans = 2x1 cell
{'County General Hospital' }
{'St. Mary's Medical Center'}
Location - категориальный массив 63 на 1, имеющий две категории.
Удалить элемент
Элементы можно удалить путем индексирования. Например, можно удалить первый элемент Location путем выбора остальных элементов с помощью Location(2:end). Однако проще всего удалить элементы [].
Location(1) = []; summary(Location)
County General Hospital 38
St. Mary's Medical Center 24
Location - категориальный массив 62 на 1, имеющий две категории. Удаление первого элемента не влияет на другие элементы из той же категории и не удаляет саму категорию.
Проверка неопределенных данных
Удалить категорию County General Hospital от Location.
Location = removecats(Location,'County General Hospital');Отображение первых восьми элементов категориального массива, Location.
Location(1:8)
ans = 8x1 categorical
St. Mary's Medical Center
<undefined>
St. Mary's Medical Center
St. Mary's Medical Center
<undefined>
<undefined>
St. Mary's Medical Center
St. Mary's Medical Center
После удаления категории County General Hospital, элементы, которые ранее относились к этой категории, больше не принадлежат ни к одной категории, определенной для Location. Категориальные массивы обозначают эти элементы как undefined.
Используйте функцию isundefined для поиска наблюдений, которые не относятся ни к одной категории.
undefinedIndex = isundefined(Location);
undefinedIndex - категориальный массив 62 на 1, содержащий логический true (1) для всех неопределенных элементов в Location.
Задать неопределенные элементы
Используйте summary функция для печати числа неопределенных элементов в Location.
summary(Location)
St. Mary's Medical Center 24
<undefined> 38
Первый элемент Location относится к категории, St. Mary's Medical Center. Задать первый элемент для undefined чтобы он больше не относился к какой-либо категории.
Location(1) = '<undefined>';
summary(Location) St. Mary's Medical Center 23
<undefined> 39
Можно сделать выбранные элементы undefined без удаления категории или изменения категорий других элементов. Задать элементы для undefined для указания неизвестных элементов со значениями.
Предварительное выделение категориальных массивов с неопределенными элементами
Неопределенные элементы можно использовать для предварительного выделения размера категориального массива для повышения производительности. Создайте категориальный массив, содержащий только элементы с известными расположениями.
definedIndex = ~isundefined(Location); newLocation = Location(definedIndex); summary(newLocation)
St. Mary's Medical Center 23
Расширить размер newLocation чтобы это был категориальный массив 200 на 1. Установить последний новый элемент для undefined. Все другие новые элементы также настроены как undefined. 23 исходных элемента сохраняют значения, которые они имели.
newLocation(200) = '<undefined>';
summary(newLocation) St. Mary's Medical Center 23
<undefined> 177
newLocation имеет место для значений, которые планируется сохранить в массиве позже.
any | categorical | categories | histogram | isundefined | removecats | summary