Преимущества Использования Категориальных массивов

Естественное представление категориальных данных

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              

Существует значительное сокращение памяти, требуемой сохранить переменную.

Смотрите также

|

Связанные примеры

Больше о