はじめに
MATLABは、科学技術計算やシミュレーションなど、多岐にわたる場面で使用されています。その中でも重要な機能のひとつが乱数配列の作成です。データサンプリングやモンテカルロ法など、乱数を用いるシーンは非常に多く存在します。本記事では、以下の3つを中心に、MATLABでの乱数生成について解説します。
- 乱数関数
- 乱数発生器
- 乱数のデータ型
これらの知識を押さえておくことで、MATLABで効率的かつ目的に応じた乱数配列を扱えるようになります。
1. 乱数関数
MATLABには、さまざまな乱数を生成する関数が用意されています。代表的なものは以下の通りです。
rand
: 一様乱数(0~1の範囲)randn
: 正規分布乱数(平均0、分散1)randi
: 整数の一様乱数randperm
: 整数のランダムな順列
1.1 rand
rand
は [0,1][0,1][0,1] の範囲で一様分布に従う乱数を返します。引数を与えることで配列のサイズを指定できます。
% 1×5 の一様乱数ベクトル
v = rand(1,5);
disp(v)
% 3×3 の一様乱数行列
A = rand(3,3);
disp(A)

図1.関数’rand’の使用例
1.2 randn
randn
は平均0、分散1の正規分布乱数を生成します。こちらも引数で配列サイズを指定可能です。
% 1×5 の正規乱数ベクトル
v_n = randn(1,5);
disp(v_n)
% 2×4 の正規乱数行列
B = randn(2,4);
disp(B)

図2.関数’randn’の使用例
1.3 randi
randi
は整数の一様乱数を返します。以下のように範囲を指定できます。
% 1から10までの整数乱数を2×3の行列で生成
C = randi([1,10],2,3);
disp(C)

図3.関数’randi’の使用例
1.4 randperm
順列(並べ替え)をランダムに生成するには randperm
を用います。
% 1から10までの整数をランダムに並べたベクトル
D = randperm(10);
disp(D)

図4.関数’randperm’の使用例
一様分布と正規分布の違い
% コマンドウィンドウに乱数関数の結果を出力
disp('rand (一様分布からのサンプル):'); % rand関数の説明
disp(rand(1, 5)); % 一様分布から1行5列の乱数を生成して表示
disp('randn (正規分布からのサンプル):'); % randn関数の説明
disp(randn(1, 5)); % 正規分布から1行5列の乱数を生成して表示
% rand vs randn のヒストグラム比較
rng('default'); % 乱数のシードを固定して再現性を確保
% 一様分布の乱数を生成
uniform_data = rand(1, 1000); % 一様分布から1000個のサンプルを生成
% 正規分布の乱数を生成
normal_data = randn(1, 1000); % 正規分布から1000個のサンプルを生成
% ヒストグラムのプロット
% 一様分布のヒストグラム
figure
histogram(uniform_data, 20, 'FaceColor', 'b'); % 一様分布のヒストグラムを青で表示
title('一様分布 (rand)'); % グラフタイトル
xlabel('値'); % x軸ラベル
ylabel('頻度'); % y軸ラベル
grid on; % グリッドを表示
% 正規分布のヒストグラム
figure
histogram(normal_data, 20, 'FaceColor', 'r'); % 正規分布のヒストグラムを赤で表示
title('正規分布 (randn)'); % グラフタイトル
xlabel('値'); % x軸ラベル
ylabel('頻度'); % y軸ラベル
grid on; % グリッドを表示

図5.一様分布(rand
)と正規分布(randn
)の違い
2. 乱数発生器
2.1 rng
とシード (seed)
MATLABでは、rng
関数を用いて**乱数発生器の初期設定(シード)**をコントロールできます。シードを固定すると、同じ順序の乱数を再現可能です。
rng(0); % シードを0に固定
X1 = rand(1,5);
disp(X1)
rng(0); % シードを0に固定
X2 = rand(1,5);
disp(X2)
disp('X1 と X2 は同じ値になる')
このように同じシードを設定することで、実験を再現性のある状態に保ちやすくなります。研究やテストの場面では重要なポイントです。

図6.乱数発生器の初期設定
2.2 乱数発生器の種類
rng('shuffle')
としておくと、現在の時刻などに応じてシードが変わるため、呼び出すたびに異なる乱数シーケンスを得られます。
さらに、rng('default')
でMATLABのデフォルトの発生器に戻す、rng(seed,'twister')
でメルセンヌ・ツイスタ(Mersenne Twister)などの発生器アルゴリズムを指定するなど、用途に応じて細かく設定可能です。
% 再現性の確認
rng(0); % シードを0に設定(再現性を確保)
rand1 = rand(1, 5); % シードを固定して一様乱数を生成
disp('最初の乱数セット:');
disp(rand1); % 一様乱数を表示
rng(0); % 再度シードを0に設定
rand2 = rand(1, 5); % 同じ乱数シーケンスを再生成
disp('再現された乱数セット:');
disp(rand2); % 同じ乱数が得られることを確認
% シードのシャッフル
rng('shuffle'); % シードを現在の時刻に基づいてランダム化
rand3 = rand(1, 5); % 異なる乱数シーケンスを生成
disp('シャッフル後の乱数セット:');
disp(rand3); % 異なる乱数を表示
% デフォルト発生器へのリセット
rng('default'); % デフォルトの設定にリセット
rand4 = rand(1, 5); % デフォルト設定で乱数を生成
disp('デフォルト設定後の乱数セット:');
disp(rand4); % デフォルト設定で生成された乱数を表示
% オプション一覧の確認
disp('rngで使用可能な発生器オプション:');
disp({'twister', 'simdTwister', 'combRecursive', 'multFibonacci', 'v4', 'v5uniform', 'v5normal'}); % 使用可能な発生器アルゴリズムを表示

図7.乱数発生器の種類
3. 乱数のデータ型
3.1 デフォルトは double
MATLABのデフォルトの数値型は double
(倍精度浮動小数点数) です。乱数関数を呼び出すと、特に指定がなければ double
型の配列が返ってきます。
A = rand(2,2);
disp('変数Aのデータ型')
disp(class(A))

図8.double型
3.2 単精度 (single) 乱数
数値型を single
(単精度浮動小数点数) にしたい場合は、single
関数でキャストできます。
GPU演算などを行う場合には、single
型が有利になるケースもあります。
A_single = single(rand(2,2));
disp('変数A_singleのデータ型')
disp(class(A_single))

図9.single型
3.3 整数型の乱数
randi
で生成した乱数は整数ですが、int8
や int16
などビット幅を指定した整数型にキャストして管理することも可能です。
B_int16 = int16(randi([0 100],3,3));
disp('変数B_int16のデータ型')
disp(class(B_int16))

図10.int型
表1.各種数値型
データ型 | 特徴 | 例 |
---|---|---|
double | 倍精度浮動小数点(標準) | rand(2,2) |
single | 単精度浮動小数点 | single(rand(2,2)) |
int8 ~int64 | 符号付き整数 | int16(randi(…)) |
uint8 ~uint64 | 符号なし整数 | uint8(randi(…)) |
まとめ
本記事では、MATLABで乱数配列を作成する際に役立つ3つのトピックについて解説しました。
- 乱数関数
rand
,randn
,randi
,randperm
など
- 乱数発生器
rng
とシードの設定(再現性の確保)- 発生器アルゴリズムの選択(デフォルト、Mersenne Twisterなど)
- 乱数のデータ型
- デフォルトは
double
、single
や整数型へのキャストも可能
- デフォルトは
乱数生成は、数値シミュレーション・統計分析・モンテカルロ法など、幅広い分野で欠かせない要素です。目的やハードウェアリソース、再現性の必要性に応じて、適切な乱数関数と乱数発生器・データ型を選択してください。
さらなる学習リソース
- MathWorks公式ドキュメント(日本語)
MATLABでの乱数生成に関するドキュメント - MATLAB Answers (Q&Aフォーラム)
乱数生成に関する実用的な質問・回答事例が豊富です。 - YouTube MathWorks公式チャンネル
動画でステップごとの実演を見ると理解が深まります。
キーワード再掲:MATLAB, 乱数配列の作成, 乱数関数, 乱数発生器, 乱数のデータ型, rand, randn, randi, randperm, rng