В этом примере показано, как работать с категориальным массивом с защищенными категориями.
Когда вы создаете категориальный массив с categorical
функция, у вас есть опция определения, защищены ли категории. Порядковые категориальные массивы всегда защищали категории, но также можно создать непорядковый категориальный массив, который защищен с помощью 'Protected',true
аргумент пары "имя-значение".
Когда вы присваиваете значения, которые не находятся в списке массива категорий, массив обновляется автоматически так, чтобы его список категорий включал новые значения. Точно так же можно объединить (непорядковые) категориальные массивы, которые имеют различные категории. Категории в результате включают категории от обоих массивов.
Когда вы присваиваете новые значения защищенному категориальному массиву, значения должны принадлежать одной из существующих категорий. Точно так же можно только объединить защищенные массивы, которые имеют те же категории.
Если вы хотите объединить два непорядковых категориальных массива, которые защитили категории, у них должны быть те же категории, но порядок не имеет значения. Получившийся категориальный массив использует порядок категории от первого массива.
Если вы хотите объединить два порядковых категориальных массива (которые всегда защищали категории), у них должны быть те же категории, включая их порядок.
Чтобы добавить новые категории в массив, необходимо использовать функциональный addcats
.
Создайте категориальный массив, содержащий размеры 10 объектов. Используйте имена small
Средняя
, и 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
. Instead, 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
.
categorical
| categories
| summary
| isprotected
| isordinal
| addcats