В этом примере показано, как работать с категориальным массивом с защищенными категориями.
Когда вы создаете категориальный массив с categorical
функция позволяет опции определить, защищены ли категории. Порядковые категориальные массивы всегда имеют защищенные категории, но можно также создать неординальный категориальный массив, который защищен с помощью 'Protected',true
аргумент пары "имя-значение".
Когда вы присваиваете значения, которые не находятся в списке категорий массива, массив обновляется автоматически, так что его список категорий включает новые значения. Точно так же можно объединить (неординальные) категориальные массивы, которые имеют различные категории. Категории в результате включают категории из обоих массивов.
При присвоении новых значений защищенному категориальному массиву значения должны относиться к одной из существующих категорий. Точно так же можно объединить только защищенные массивы с одинаковыми категориями.
Если вы хотите объединить два неординальных категориальных массивов, которые имеют защищенные категории, они должны иметь одни и те же категории, но порядок не имеет значения. Получившийся категориальный массив использует порядок категорий из первого массива.
Если необходимо объединить два порядкового категориального массива (которые всегда имеют защищенные категории), они должны иметь одинаковые категории, включая их порядок.
Чтобы добавить новые категории в массив, необходимо использовать функцию addcats
.
Создайте категориальный массив, содержащий размеры 10 объектов. Используйте имена small
, medium
, и large
для значений 'S'
, 'M'
, и 'L'
.
A = categorical({'M';'L';'S';'S';'M';'L';'M';'L';'M';'S'},... {'S','M','L'},{'small','medium','large'},'Ordinal',true)
A = 10x1 categorical
medium
large
small
small
medium
large
medium
large
medium
small
A
представляет собой категориальный массив 10 на 1.
Отображение категорий A
.
categories(A)
ans = 3x1 cell
{'small' }
{'medium'}
{'large' }
Когда вы создаете порядковый категориальный массив, категории всегда защищены.
Используйте isprotected
функция для проверки того, что категории A защищены.
tf = isprotected(A)
tf = logical
1
Категории A
защищены.
Если вы пытаетесь назначить новое значение, которое не принадлежит одной из существующих категорий, MATLAB ® возвращает ошибку. Для примера вы не можете присвоить значение 'xlarge'
в категориальный массив, как в выражении A(2) = 'xlarge'
, потому что xlarge
не является категорией A
. Вместо этого MATLAB ® возвращает ошибку:
Error using categorical/subsasgn (line 68)
Cannot add a new category 'xlarge' to this categorical array
because its categories are protected. Use ADDCATS to
add the new category.
Добавление новой категории для xlarge
, используйте addcats
функция. Начиная с A
является порядковым, вы должны задать порядок для новой категории.
A = addcats(A,'xlarge','After','large');
Теперь присвойте значение для 'xlarge'
, поскольку он имеет существующую категорию.
A(2) = 'xlarge'
A = 10x1 categorical
medium
xlarge
small
small
medium
large
medium
large
medium
small
A
теперь это категориальный массив 10 на 1 с четырьмя категориями, таким что small < medium < large < xlarge
.
Создайте другой порядковый категориальный массив, B
, содержащего размеры пяти элементов.
B = categorical([2;1;1;2;2],1:2,{'xsmall','small'},'Ordinal',true)
B = 5x1 categorical
small
xsmall
xsmall
small
small
B
представляет собой категориальный массив 5 на 1 с двумя категориями, такими что xsmall < small
.
Чтобы объединить два порядковых категориальных массивов (которые всегда имеют защищенные категории), они должны иметь одни и те же категории, и категории должны быть в одном порядке.
Добавить категорию 'xsmall'
на A
перед категорией 'small'
.
A = addcats(A,'xsmall','Before','small'); categories(A)
ans = 5x1 cell
{'xsmall'}
{'small' }
{'medium'}
{'large' }
{'xlarge'}
Добавить категории {'medium','large','xlarge'}
на B
после 'small' категории
.
B = addcats(B,{'medium','large','xlarge'},'After','small'); categories(B)
ans = 5x1 cell
{'xsmall'}
{'small' }
{'medium'}
{'large' }
{'xlarge'}
Категории A
и B
теперь те же самые, включая их порядок.
Сцепление по вертикали A
и B
.
C = [A;B]
C = 15x1 categorical
medium
xlarge
small
small
medium
large
medium
large
medium
small
small
xsmall
xsmall
small
small
Значения из B
добавляются к значениям из A
.
Перечислите категории C
.
categories(C)
ans = 5x1 cell
{'xsmall'}
{'small' }
{'medium'}
{'large' }
{'xlarge'}
C
является порядковым категориальным массивом 16 на 1 с пятью категориями, таким что xsmall < small < medium < large < xlarge
.
addcats
| categorical
| categories
| isordinal
| isprotected
| summary