В этом примере показано, как работать с категориальным массивом с защищенными категориями.
При создании категориального массива с помощью 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