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

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

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              

Происходит значительное сокращение памяти, необходимой для хранения переменной.

См. также

|

Похожие примеры

Подробнее о