Работа с защищенными категориальными массивами

В этом примере показано, как работать с категориальным массивом с защищенными категориями.

Когда вы создаете категориальный массив с 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.

См. также

| | | | |

Похожие примеры

Подробнее о