exponenta event banner

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

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

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              

Значительно уменьшена память, необходимая для хранения переменной.

См. также

|

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

Подробнее