Main Content

categorical 配列の利点

categorical データの自然表現

categorical は、離散カテゴリの有限集合からの値をもつデータを格納するためのデータ型です。categorical 配列の代わりによく使用される方法の 1 つとして、文字配列または文字ベクトルの cell 配列を使用する方法があります。文字配列の値と文字ベクトルの cell 配列を比較するには、strcmp を使用しなければなりませんが、煩雑な場合があります。categorical 配列を利用すれば、論理演算子 eq (==) を使用して、数値配列を比較するのと同じように要素を比較することができます。categorical 配列の代わりによく使用されるもう 1 つの方法は、数値配列で整数を使用して categorical データを保存する方法です。数値配列を使用すると、有用なすべての説明情報がカテゴリ名から失われるだけでなく、整数値が categorical データの場合にはもたないような通常の数値的意味をもっているように受け止められる傾向があります。

文字ベクトルの数学的な順序

categorical 配列は、離散カテゴリの有限集合からの値をもつ非数値データに使用できる、メモリ効率に優れた便利なコンテナーです。これらは、特に、カテゴリに意味のある数学的な順序が付けられている場合、たとえば、small < medium < large であるカテゴリの離散集合 {'small','medium','large'} からの要素をもつ配列などでは便利です。

文字配列または文字ベクトルの cell 配列ではアルファベット順以外の順序付けは使用できません。そのため、「より大きい」や「より小さい」などの不等号による比較はできません。categorical 配列を利用すれば、関係演算を使用して等価性をテストし、意味のある数学的な順序が付けられている要素単位の比較を実行することができます。

必要なメモリの削減

この例では、データを文字ベクトルの cell 配列として格納する場合と categorical 配列として格納する場合に必要なメモリを比較する方法を説明します。categorical 配列のカテゴリは文字ベクトルとして定義されるため、文字ベクトルの cell 配列や配列 char で格納や操作を行うには多大なコストがかかる場合があります。categorical 配列には各カテゴリ名のコピーが 1 つだけ格納されるので、多くの場合、配列を格納するために必要なメモリ量を削減することができます。

文字ベクトルの cell 配列のサンプルを作成します。

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 は文字ベクトルの cell 配列で、メモリが 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              

変数の格納に必要なメモリは大幅に減少しています。

参考

|

関連する例

詳細