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

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

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              

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

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

|

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

Больше о