В этом примере показано, как создать категориальный массив. 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
categorical | categories | discretize | summary