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 16200 cell
Переменная state
- массив ячеек из векторов символов, требующих 17 400 байт памяти.
Преобразование state
в категориальный массив.
state = categorical(state);
Отобразите дискретные категории в переменной state
.
categories(state)
ans = 3x1 cell
{'CA'}
{'MA'}
{'NY'}
state
содержит 150 элементов, но только три отдельные категории.
Отображение информации о переменной state
.
whos state
Name Size Bytes Class Attributes state 150x1 476 categorical
Происходит значительное сокращение памяти, необходимой для хранения переменной.