Этот пример показывает, как создать категориальный массив. categorical
является типом данных для того, чтобы хранить данные со значениями от конечного множества дискретных категорий. Эти категории могут иметь естественный порядок, но он не требуется. Категориальный массив обеспечивает эффективное устройство хранения данных и удобную манипуляцию данных, также поддерживая понятные имена для значений. Категориальные массивы часто используются в таблице, чтобы задать группы строк.
По умолчанию категориальные массивы содержат категории, которые не имеют никакого математического упорядоченного расположения. Например, дискретный набор любимых категорий, {'dog' 'cat' 'bird'}
не имеет никакого значимого математического упорядоченного расположения, таким образом, MATLAB® использует алфавитное упорядоченное расположение {'bird' 'cat' 'dog'}
. Порядковые категориальные массивы содержат категории, которые имеют значимое математическое упорядоченное расположение. Например, дискретный набор категорий размера {'small', 'medium', 'large'}
имеет математическое упорядоченное расположение small < medium < large
.
Когда вы создаете категориальные массивы из массивов ячеек из символьных векторов или строковых массивов, продвижение и конечные пробелы удалены. Например, если вы задаете текст {' кошка' 'собака'} как категории, затем когда вы преобразовываете их в категории, они становятся {'кошкой' 'собака'}.
Можно использовать функцию categorical
, чтобы создать категориальный массив из числового массива, логического массива, массива строк, массива ячеек из символьных векторов или существующего категориального массива.
Создайте массив ячеек из символьных векторов 1 на 11, содержащий имена состояния из Новой Англии.
state = {'MA','ME','CT','VT','ME','NH','VT','MA','NH','CT','RI'};
Преобразуйте массив ячеек, state
, к категориальному массиву, который не имеет никакого математического порядка.
state = categorical(state)
state = 1x11 categorical array
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 array
{'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 array
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 array
{'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 = string({'Earth','Jupiter','Neptune','Jupiter','Mars','Earth'})
str = 1x6 string array
"Earth" "Jupiter" "Neptune" "Jupiter" "Mars" "Earth"
Преобразуйте str
в категориальный массив.
planets = categorical(str)
planets = 1x6 categorical array
Earth Jupiter Neptune Jupiter Mars Earth
Добавьте недостающие элементы в str
и преобразуйте его в категориальный массив. Где str
имеет отсутствующие значения, planets
имеет неопределенные значения.
str(8) = 'Mars'
str = 1x8 string array
Columns 1 through 6
"Earth" "Jupiter" "Neptune" "Jupiter" "Mars" "Earth"
Columns 7 through 8
<missing> "Mars"
planets = categorical(str)
planets = 1x8 categorical array
Columns 1 through 6
Earth Jupiter Neptune Jupiter Mars Earth
Columns 7 through 8
<undefined> Mars
categorical
| categories
| discretize
| summary