exponenta event banner

Создание категориальных массивов

В этом примере показано, как создать категориальный массив. categorical - тип данных для хранения данных со значениями из конечного набора дискретных категорий. Эти категории могут иметь естественный порядок, но он не требуется. Категориальный массив обеспечивает эффективное хранение и удобное управление данными, сохраняя при этом значимые имена значений. Категориальные массивы часто используются в таблице для определения групп строк.

По умолчанию категориальные массивы содержат категории, не имеющие математического порядка. Например, дискретный набор категорий домашних животных {'dog' 'cat' 'bird'} не имеет значимого математического упорядочения, поэтому MATLAB ® использует алфавитное упорядочение{'bird' 'cat' 'dog'}. Порядковые категориальные массивы содержат категории, имеющие значимое математическое упорядочение. Например, дискретный набор категорий размеров {'small', 'medium', 'large'} имеет математический порядок small < medium < large.

При создании категориальных массивов из массивов ячеек символьных векторов или строковых массивов удаляются начальные и конечные пробелы. Например, если в качестве категорий указан текст {'cat' 'dog'}, то при преобразовании в категории они становятся {'cat' 'dog'}.

Создание категориального массива из массива ячеек векторов символов

Вы можете использовать categorical функция для создания категориального массива из числового массива, логического массива, строкового массива, массива ячеек символьных векторов или существующего категориального массива.

Создайте массив ячеек 1 на 11 из векторов символов, содержащих имена состояний из Новой Англии.

state = ["MA","ME","CT","VT","ME","NH","VT","MA","NH","CT","RI"];

Преобразование массива ячеек, state, к категориальному массиву, который не имеет математического порядка.

state = categorical(state)
state = 1x11 categorical
  Columns 1 through 9

     MA      ME      CT      VT      ME      NH      VT      MA      NH 

  Columns 10 through 11

     CT      RI 

class(state)
ans = 
'categorical'

Перечисление дискретных категорий в переменной state.

categories(state)
ans = 6x1 cell
    {'CT'}
    {'MA'}
    {'ME'}
    {'NH'}
    {'RI'}
    {'VT'}

Категории перечислены в алфавитном порядке.

Создать порядковый категориальный массив из массива ячеек векторов символов

Создайте массив символьных векторов размером 1 на 8, содержащий восемь объектов.

AllSizes = ["medium","large","small","small","medium",...
            "large","medium","small"];

Массив ячеек, AllSizes, имеет три различных значения: 'large', 'medium', и 'small'. С массивом ячеек символьных векторов нет удобного способа указать, что small < medium < large.

Преобразование массива ячеек, AllSizes, к порядковому категориальному массиву. Использовать valueset для указания значений small, medium, и large, которые определяют категории. Для массива порядковых категорий первая указанная категория является наименьшей, а последняя категория - наибольшей.

valueset = ["small","medium","large"];
sizeOrd = categorical(AllSizes,valueset,'Ordinal',true)
sizeOrd = 1x8 categorical
  Columns 1 through 6

     medium      large      small      small      medium      large 

  Columns 7 through 8

     medium      small 

class(sizeOrd)
ans = 
'categorical'

Порядок значений в категориальном массиве, sizeOrd, остается неизменным.

Перечислите дискретные категории в категориальной переменной, sizeOrd.

categories(sizeOrd)
ans = 3x1 cell
    {'small' }
    {'medium'}
    {'large' }

Категории перечислены в указанном порядке в соответствии с математическим порядком small < medium < large.

Создание порядкового категориального массива путем объединения числовых данных

Создайте вектор из 100 случайных чисел от нуля до 50.

x = rand(100,1)*50;

Используйте discretize для создания категориального массива путем объединения значений x. Поместите все значения от нуля до 15 в первую ячейку, все значения от 15 до 35 во вторую ячейку и все значения от 35 до 50 в третью ячейку. Каждая ячейка включает левую конечную точку, но не включает правую конечную точку.

catnames = ["small","medium","large"];
binnedData = discretize(x,[0 15 35 50],'categorical',catnames);

binnedData является порядковым категориальным массивом 100 на 1 с тремя категориями, таким образом, что small < medium < large.

Используйте summary для печати количества элементов в каждой категории.

summary(binnedData)
     small       30 
     medium      35 
     large       35 

Создать категориальный массив из строкового массива

Начиная с R2016b, можно создавать массивы строк с помощью string и преобразовать их в категориальный массив.

Создайте строковый массив, содержащий имена планет.

str = ["Earth","Jupiter","Neptune","Jupiter","Mars","Earth"]
str = 1x6 string
    "Earth"    "Jupiter"    "Neptune"    "Jupiter"    "Mars"    "Earth"

Новообращенный str в категориальный массив.

planets = categorical(str)
planets = 1x6 categorical
     Earth      Jupiter      Neptune      Jupiter      Mars      Earth 

Добавить отсутствующие элементы в str и преобразовать его в категориальный массив. Где str имеет отсутствующие значения, planets имеет неопределенные значения.

str(8) = "Mars"
str = 1x8 string
  Columns 1 through 6

    "Earth"    "Jupiter"    "Neptune"    "Jupiter"    "Mars"    "Earth"

  Columns 7 through 8

    <missing>    "Mars"

planets = categorical(str)
planets = 1x8 categorical
  Columns 1 through 6

     Earth      Jupiter      Neptune      Jupiter      Mars      Earth 

  Columns 7 through 8

     <undefined>      Mars 

См. также

| | |

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

Подробнее