HOWTO · MATLAB

MATLAB で変数の型を確認する方法

MATLAB で変数のクラスを調べる方法と、型の条件を判定する方法を紹介します。

このページの内容

MATLAB の値のクラス名を取得するには class()、現在のワークスペース内の変数を一覧するには whos、型に関する条件を論理値で判定するには isa()、ischar()、isnumeric() などの述語関数を使います。値を特定したいのか、ワークスペース内を確認したいのか、コードの分岐条件に使いたいのかに応じて選びましょう。

MATLAB で class() を使って変数の型を確認する

class() 関数は、値のクラス名を文字ベクトルとして返します。たとえば、MATLAB では数値リテラル 42 のクラスは double で、一重引用符で囲んだテキスト 'Hello, MATLAB!' はクラス char の文字配列です。次の Octave 互換スクリプトでは、クラスの確認と述語関数の利用を一連の流れで示します。

numericVar = 42;
charVar = 'Hello, MATLAB!';

fprintf('numericVar class: %s\n', class(numericVar));
fprintf('charVar class: %s\n', class(charVar));
fprintf('numericVar is double: %d\n', isa(numericVar, 'double'));
fprintf('charVar is a character array: %d\n', ischar(charVar));
fprintf('numericVar is numeric: %d\n', isnumeric(numericVar));

if isa(numericVar, 'double')
    fprintf('Process numericVar as a double.\n');
end
numericVar class: double
charVar class: char
numericVar is double: 1
charVar is a character array: 1
numericVar is numeric: 1
Process numericVar as a double.

実際のクラス名を知りたい場合は、MATLAB で class(value) を使います。この呼び出しが調べるのは1つの値であり、ワークスペース全体の一覧ではありません。

MATLAB の whos コマンドで変数の型を調べる

whos コマンドは、現在のワークスペースにある変数について、名前、サイズ、バイト数、クラス、属性などを表示します。whos と入力するとワークスペース内の変数を一覧でき、whos numericVar のように指定すれば名前を指定した1つの変数を調べられます。クラスの列を見れば、複数の値をまとめて確認できます。ただし、表示対象は現在のワークスペースまたはスコープから見える変数に限られ、変数に代入されていない任意の式は調べられません。そのような単一の値については class(expression) を使います。

MATLAB で isa() を使って特定の型かどうかを判定する

値が指定したクラスに属するかをコードで判定するには、isa(value, 'typeName') を使います。numericVar = 42 と charVar = 'Hello, MATLAB!' の場合、isa(numericVar, 'double') と isa(charVar, 'char') は論理値の true を返し、isa(numericVar, 'single') は false を返します。結果は、上のスクリプトのように if 文の条件としてそのまま使えます。isa() は MATLAB のクラス階層も考慮するため、値の厳密なクラス名とは異なるスーパークラスやインターフェイスを指定しても true になることがあります。クラス名そのものを取得するには class(value) を使ってください。

MATLAB で ischar() を使って文字配列を確認する

ischar() 関数は、入力が文字配列かどうかを示す論理値を返します。charVar = 'Hello, MATLAB!' の場合、ischar(charVar) は true を返し、ischar(42) は false を返します。文字配列を受け取る関数でテキスト処理を行うときは、if ischar(value) のように分岐できます。二重引用符で記述する MATLAB の string 配列は別の型であり、この文字配列の判定には通りません。文字ベクトルと string 値の両方を受け取るプログラムでは、この違いを把握しておくと役立ちます。

MATLAB で isnumeric() を使って数値かどうかを確認する

値が数値型かどうかを調べるには isnumeric(value) を使います。上の例では isnumeric(numericVar) は true、isnumeric(charVar) は false を返します。この述語には double、single、整数クラスなどの MATLAB 数値クラスが含まれますが、true だからといって値が特に double であるとは限りません。この判定では logical 値は数値として扱われません。特定のクラスが必要なら isa(value, 'double') で確認するか、class(value) で正確なクラス名を調べてください。

まとめ

1つの値のクラス名を取得するには class()、現在のワークスペースの変数を確認するには whos、コードで論理条件を判定するには isa()、ischar()、isnumeric() を使います。それぞれ答える問いは異なります。class() や whos で値や変数を調べ、プログラムで満たす必要のある条件に合った述語を選びましょう。