Main Content

categorical형 배열 사용의 이점

categorical형 데이터의 자연스러운 표현

categorical은 유한한 이산 범주 집합에 속하는 값의 데이터를 저장하기 위한 데이터형입니다. categorical형 배열 사용에 대한 일반적인 대안은 문자형 배열 또는 문자형 벡터로 구성된 셀형 배열을 사용하는 것입니다. 문자형 배열과 문자형 벡터로 구성된 셀형 배열의 값을 비교하려면 strcmp를 사용해야 하며, 이 작업은 번거로울 수 있습니다. categorical형 배열에서는 논리 연산자 eq(==)를 사용하여 숫자형 배열을 비교하는 것과 동일한 방식으로 요소를 비교할 수 있습니다. categorical형 배열 사용에 대한 또 다른 일반적인 대안은 숫자형 배열의 정수를 사용하여 categorical형 데이터를 저장하는 것입니다. 숫자형 배열을 사용할 경우 범주 이름에 담긴 모든 유용한 설명 정보가 손실될 뿐만 아니라 categorical형 데이터에서 정수 값이 통상의 수치적 의미를 갖는 것으로 오인될 여지가 있습니다.

문자형 벡터의 수학적 정렬(Mathematical Ordering)

categorical형 배열은 유한한 이산 범주 집합에 속하는 값을 갖는 비수치적 데이터에 사용할 수 있는 간편하고 메모리 효율적인 컨테이너입니다. categorical형 배열은 특히 이산 범주 집합 {'small','medium','large'}의 항목을 갖는 배열과 같이 범주에 유의미한 수학적 정렬(이 경우 small < medium < large)이 적용된 경우 유용합니다.

문자형 배열 또는 문자형 벡터로 구성된 셀형 배열에는 사전순 이외의 다른 순서 정렬을 적용할 수 없습니다. 따라서, 보다 큼 및 보다 작음과 같은 부등식 비교는 수행할 수 없습니다. categorical형 배열의 경우, 관계 연산을 사용하여 등식을 테스트하고 유의미한 수학적 순서가 있는 요소별 비교를 수행할 수 있습니다.

메모리 사용량 줄이기

이 예제에서는 데이터를 문자형 벡터로 구성된 셀형 배열로 저장하는 경우와 categorical형 배열로 저장하는 경우에 필요한 메모리를 비교하는 방법을 보여줍니다. categorical형 배열은 문자형 벡터로 정의된 범주를 가지는데, 이러한 범주를 문자형 벡터로 구성된 셀형 배열 또는 char 배열에 저장하고 조작하는 데 많은 비용이 들 수 있습니다. categorical형 배열은 범주 이름당 하나의 복사본만 저장하므로, 대개 배열을 저장하는 데 필요한 메모리 크기가 줄어듭니다.

문자형 벡터로 구성된 샘플 셀형 배열을 생성합니다.

state = [repmat({'MA'},25,1);repmat({'NY'},25,1);...
    repmat({'CA'},50,1);...
    repmat({'MA'},25,1);repmat({'NY'},25,1)];

변수 state에 대한 정보를 표시합니다.

whos state
  Name         Size            Bytes  Class    Attributes

  state      150x1             16200  cell               

변수 state는 문자형 벡터로 구성된 셀형 배열이며 17,400바이트의 메모리를 필요로 합니다.

state를 categorical형 배열로 변환합니다.

state = categorical(state);

변수 state에 있는 이산 범주들을 표시합니다.

categories(state)
ans = 3x1 cell
    {'CA'}
    {'MA'}
    {'NY'}

state는 150개 요소를 포함하지만, 이산 범주는 3개만 포함합니다.

변수 state에 대한 정보를 표시합니다.

whos state
  Name         Size            Bytes  Class          Attributes

  state      150x1               476  categorical              

변수를 저장하는 데 필요한 메모리가 상당히 줄어들었습니다.

참고 항목

|

관련 예제

세부 정보