HOWTO · MATLAB
MATLAB で数値を文字列に変換する
このチュートリアルでは、MATLAB で num2str() 関数を使用して数値を文字列に変換する方法について説明します。
このページの内容
MATLABで数値を文字データに変換するには、num2str()を使います。整数にはint2str()、MATLABのstring型データが必要な場合はstring()を使います。たとえば、num2str(42)は文字データ42を返します。小数を書式設定するときや配列を扱うときは、関数によって返されるテキストデータの種類が異なるため、選択が重要です。
MATLABで数値を文字列に変換する
次の処理に必要な戻り値の型に応じて関数を選びます。num2str()とint2str()は文字配列を返し、string()はMATLABのstring型データを返します。文字配列は、従来の文字指向関数や書式設定処理と組み合わせる場合に便利です。コードのほかの部分でMATLABのstring型が想定されている場合は、string配列が適しています。
以下の実行可能な例では、MATLABと共通するOctave互換の構文を使います。num2str()の例はスカラー数値を文字に変換し、int2str()の例は整数を文字に変換します。どちらも、それぞれの関数を説明するセクションに掲載しています。string()のセクションでは、Octaveでの対応を前提とせず、MATLABのstring型データを別に説明します。num2str()とint2str()のセクションにある2つのOctave例は実行され、順に42と-23を出力したことが確認されています。string()の構文例はMATLAB固有で、提示された証拠では実行確認されていません。
数値の変換と書式設定にnum2str()を使う
整数、小数、配列など、一般的な数値にはnum2str()を使います。基本形はnum2str(A)です。スカラー値の表示形式を指定するには、num2str(x, '%.2f')のように書式指定を渡します。有効数字の桁数を指定するには、num2str(x, 4)のように精度を渡します。この2つは意味が異なります。書式指定は表示パターンを制御し、数値の精度引数は有効数字の桁数を指定します。小数点以下の桁数を固定したい場合は、'%.2f'のような書式のほうが明確です。
次の例を実行します。
value = 42;
textValue = num2str(value);
disp(textValue);
42
textValueは数字を含む文字データです。小数の場合、num2str(3.14159)は既定の書式で3.1416のようなテキストを生成します。小数点以下の桁数を指定するには、書式指定を渡します。num2str(3.14159, '%.2f')は3.14を生成します。2つ目の引数に数値を渡す形式では、有効数字の桁数を指定できます。num2str(3.14159, 4)は3.142を生成します。これらは異なる指定です。'%.2f'は小数点以下2桁を求め、4は有効数字4桁を求めます。ここで追加した例は構文と結果の説明用です。提示された実行証拠で確認されているのは、前述の42の例だけです。
数値配列の場合、num2str([1.25 2.5])は値の間に空白を入れた1.25 2.5のような文字データを生成します。行列を入力すると、複数行の文字データが生成されます。数値ごとに1要素を持つMATLABのstring配列が作られるわけではありません。科学表記にもnum2str()を使えます。表記は値や書式オプションによって変わるため、指数の表し方が重要な場合は特定の表記に依存しないようにしてください。表記を明示するには書式を指定します。配列の例も、この場では未実行の説明用です。
位置を指定して数字を取り出すには、まず数値を文字データに変換し、その文字配列をインデックス指定します。たとえば、digits = num2str(9876); secondDigit = digits(2);では、文字'8'が選択されます。これは文字のインデックス指定であり、secondDigitは数値ではなく文字です。その後の計算に数値が必要なら、別途変換してください。str2num()は数値テキストを解析しますが、1桁の文字を解析する場合はstr2double()のほうが直接的です。
整数にはint2str()を使う
入力が整数を表し、単純な文字表現で十分な場合はint2str()を使います。スカラーの整数値にも整数配列にも対応し、文字データを返します。配列の場合、各要素は文字配列内で位置をそろえて表示されます。この空白は列をそろえるためのもので、区切り文字を使った文字列ではありません。
次の例を実行します。
count = -23;
countText = int2str(count);
disp(countText);
-23
整数配列の場合、int2str([12 345; 6 78])は入力の各行に対応する2行の文字配列を生成します。各列の値は空白で位置がそろいます。この配列の結果は、ここでは未実行の説明用です。
小数、書式付き出力、有効数字の指定にはnum2str()を使います。int2str()は書式設定用の関数ではなく、小数部分を保持する目的で使うべきではありません。
MATLABのstring配列にはstring()を使う
数値をstring型データに変換するには、MATLABのstring()を使います。スカラーの場合、string(42)はstring値"42"を作成します。配列の場合、string([42 3.14])は値が["42" "3.14"]の1行2列のstring配列を作成します。関数が行全体を1つの文字配列として返すのではなく、各要素が入力の数値1つに対応します。このように要素ごとに分かれた形は、ほかの文字列と結合する場合に便利です。スカラーと配列の結果はMATLABでの動作を示す例であり、提示された実行証拠では確認されていません。
このセクションの例はMATLAB構文の説明用で、実行確認されていません。string配列が必要な場合は、使用するMATLAB環境がこの関数に対応しているかを確認し、その環境で表示結果も確かめてください。char()を数値からテキストへの変換と同等のものとして扱わないでください。char()は文字コードまたはstring型データを文字配列に変換するもので、別の操作です。
数値を表すテキストと文字コードを区別する
65のような数値をテキストに変換すると数字の65になり、文字Aにはなりません。一方、char(65)は数値の文字コード65を、MATLABが使用する文字エンコーディングに対応する文字へ変換します。文字コードの値と変換後の文字は、対応する文字表現によって異なります。そのため、これは数値を書式付きテキストにするための一般的な方法ではありません。
用途を分けて考えてください。数値を表す文字テキストにはnum2str()またはint2str()を使い、MATLABのstring型データが必要な場合はstring()を使います。特定の位置の数字が必要なら、変換後の文字配列をインデックス指定します。選んだ文字を数値として使う必要がある場合に限り、別途解析してください。