В этом примере показано, как создать категориальный массив. 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
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 = string({'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