categorical
тип данных должен хранить данные со значениями от конечного множества дискретных категорий. Одна общая альтернатива использованию категориальных массивов должна использовать символьные массивы или массивы ячеек из символьных векторов. Чтобы сравнить значения в символьных массивах и массивах ячеек из символьных векторов, необходимо использовать strcmp
который может быть громоздким. С категориальными массивами можно использовать логический оператор eq
(==
) сравнить элементы таким же образом, что вы сравниваете числовые массивы. Другая общая альтернатива использованию категориальных массивов должна хранить категориальные данные с помощью целых чисел в числовых массивах. Используя числовые массивы теряет всю полезную описательную информацию от названий категории, и также имеет тенденцию предлагать, чтобы целочисленные значения имели свое обычное числовое значение, которое для категориальных данных они не делают.
Категориальные массивы удобны и память эффективные контейнеры для нечисловых данных со значениями от конечного множества дискретных категорий. Они особенно полезны, когда категории имеют значимое математическое упорядоченное расположение, такое как массив с записями от дискретного набора категорий {'small','medium','large'}
где small < medium < large
.
Упорядоченное расположение кроме алфавитного порядка не возможно с символьными массивами или массивами ячеек из символьных векторов. Таким образом сравнения неравенства, такой как больше и меньше, чем, не возможны. С категориальными массивами можно использовать реляционные операции, чтобы протестировать на равенство и выполнить поэлементные сравнения, которые имеют значимое математическое упорядоченное расположение.
В этом примере показано, как сравнить память, требуемую хранить данные как массив ячеек из символьных векторов по сравнению с категориальным массивом. Категориальные массивы имеют категории, которые заданы как векторы символов, которые могут быть дорогостоящими, чтобы сохранить и управлять в массиве ячеек из символьных векторов или char
массив. Категориальные массивы хранят только одну копию каждого названия категории, часто уменьшая объем памяти, требуемый сохранить массив.
Создайте демонстрационный массив ячеек из символьных векторов.
state = [repmat({'MA'},25,1);repmat({'NY'},25,1);... repmat({'CA'},50,1);... repmat({'MA'},25,1);repmat({'NY'},25,1)];
Отобразите информацию о переменной state
.
whos state
Name Size Bytes Class Attributes state 150x1 17400 cell
Переменная state
массив ячеек из символьных векторов, требующий 17 400 байтов памяти.
Преобразуйте state
к категориальному массиву.
state = categorical(state);
Отобразите дискретные категории в переменной state
.
categories(state)
ans = 3x1 cell array
{'CA'}
{'MA'}
{'NY'}
state
содержит 150 элементов, но только три отличных категории.
Отобразите информацию о переменной state
.
whos state
Name Size Bytes Class Attributes state 150x1 500 categorical
Существует значительное сокращение памяти, требуемой сохранить переменную.