randn
正規分布した乱数
構文
説明
X = randn
は標準正規分布から取り出された乱数スカラーを返します。
X = randn(
は、sz1,...,szN
)sz1
x ... x szN
の乱数の配列を返します。sz1,...,szN
はそれぞれの次元のサイズを示します。たとえば、randn(3,4)
は 3 行 4 列の行列を返します。
X = randn(___,
は、データ型が typename
)typename
の乱数の配列を返します。typename
の入力値は "single"
または "double"
です。前述の構文の入力引数のいずれかを使用できます。
X = randn(
は、既定のグローバル ストリームの代わりに、乱数ストリーム s
,___)s
から数値を生成します。ストリームを作成するには、RandStream
を使用します。s
の後に、前述の構文にある任意の入力引数の組み合わせを指定できます。
例
乱数の行列
正規分布した乱数から成る 5 行 5 列の行列を生成します。
r = randn(5)
r = 5×5
0.5377 -1.3077 -1.3499 -0.2050 0.6715
1.8339 -0.4336 3.0349 -0.1241 -1.2075
-2.2588 0.3426 0.7254 1.4897 0.7172
0.8622 3.5784 -0.0631 1.4090 1.6302
0.3188 2.7694 0.7147 1.4172 0.4889
二変量正規分布の乱数
指定した平均ベクトルと共分散行列をもつ二変量正規分布から値を生成します。
mu = [1 2]; sigma = [1 0.5; 0.5 2]; R = chol(sigma); z = repmat(mu,10,1) + randn(10,2)*R
z = 10×2
1.5377 0.4831
2.8339 6.9318
-1.2588 1.8302
1.8622 2.3477
1.3188 3.1049
-0.3077 1.0750
0.5664 1.6190
1.3426 4.1420
4.5784 5.6532
3.7694 5.2595
乱数発生器のリセット
乱数発生器の現在の状態を保存し、1 行 5 列の乱数のベクトルを作成します。
s = rng; r = randn(1,5)
r = 1×5
0.5377 1.8339 -2.2588 0.8622 0.3188
乱数発生器を s
の状態に戻し、1 行 5 列の乱数のベクトルを新たに作成します。前と同じ値が得られます。
rng(s); r1 = randn(1,5)
r1 = 1×5
0.5377 1.8339 -2.2588 0.8622 0.3188
乱数の 3 次元配列
3 x 2 x 3 の乱数の配列を作成します。
X = randn([3,2,3])
X = X(:,:,1) = 0.5377 0.8622 1.8339 0.3188 -2.2588 -1.3077 X(:,:,2) = -0.4336 2.7694 0.3426 -1.3499 3.5784 3.0349 X(:,:,3) = 0.7254 -0.2050 -0.0631 -0.1241 0.7147 1.4897
乱数のデータ型の指定
単精度の乱数から成る 1 行 4 列のベクトルを作成します。
r = randn(1,4,"single")
r = 1x4 single row vector
0.5377 1.8339 -2.2588 0.8622
class(r)
ans = 'single'
既存の配列によるサイズの定義
正規分布した乱数の行列を既存の配列と同じサイズで作成します。
A = [3 2; -2 1]; sz = size(A); X = randn(sz)
X = 2×2
0.5377 -2.2588
1.8339 0.8622
上記の 2 行のコードを 1 行にまとめた一般的なパターンを次に示します。
X = randn(size(A));
既存の配列で定義されるサイズとデータ型
単精度の乱数からなる 2 行 2 列の行列を作成します。
p = single([3 2; -2 1]);
p
とサイズおよびデータ型が同じである乱数の配列を作成します。
X = randn(size(p),"like",p)
X = 2x2 single matrix
0.5377 -2.2588
1.8339 0.8622
class(X)
ans = 'single'
ランダムな複素数
標準複素数正規分布からランダムな複素数を 10 個生成します。
a = randn(10,1,"like",1i)
a = 10×1 complex
0.3802 + 1.2968i
-1.5972 + 0.6096i
0.2254 - 0.9247i
-0.3066 + 0.2423i
2.5303 + 1.9583i
-0.9545 + 2.1460i
0.5129 - 0.0446i
0.5054 - 0.1449i
-0.0878 + 1.0534i
0.9963 + 1.0021i
指定された平均と共分散をもつランダムな複素数
既定では、randn(n,"like",1i)
は標準複素数正規分布から乱数を生成します。実数部と虚数部は独立した正規分布の確率変数で、平均が 0
、分散が 1/2
です。共分散行列は [1/2 0; 0 1/2]
の形式です。
z = randn(50000,1,"like",1i);
cov_z = cov(real(z),imag(z),1)
cov_z = 2×2
0.4980 0.0007
0.0007 0.4957
より一般的な複素数正規分布を指定するには、平均と共分散行列を定義します。たとえば、平均を として指定し、共分散行列を として指定します。
mu = 1 + 2i; sigma = [2 -2; -2 4];
以前に生成したデータを変換して、新たに定義された複素数正規分布に従うようにします。データをスケーリングする場合は、sqrt(2)
の係数を含めます。元の分布内の実数部と虚数部の分散が 1/2 であるためです。
R = chol(sigma); z_comp = [real(z) imag(z)]; z = repmat(mu,50000,1) + z_comp*sqrt(2)*R*[1; 1i]; z(1:10)
ans = 10×1 complex
1.7604 + 3.8331i
-2.1945 + 6.4138i
1.4508 - 0.3002i
0.3868 + 3.0977i
6.0606 + 0.8560i
-0.9090 + 8.2011i
2.0259 + 0.8850i
2.0108 + 0.6993i
0.8244 + 4.2823i
2.9927 + 2.0115i
入力引数
n
— 正方行列のサイズ
整数値
正方行列のサイズ。整数値として指定します。
n
が0
の場合、X
は空の行列です。n
が負の場合、0
として扱われます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz1,...,szN
— 各次元のサイズ (個別の引数として指定)
整数値
各次元のサイズ。整数値の個別の引数として指定します。
いずれかの次元のサイズが
0
の場合、X
は空の配列です。いずれかの次元のサイズが負の場合、そのサイズは
0
として扱われます。2 番目より後の次元のサイズが 1 の場合、それらの次元は
randn
で無視されます。たとえばrandn(3,1,1,1)
では 3 行 1 列の乱数のベクトルが生成されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz
— 各次元のサイズ (行ベクトルとして指定)
整数値
各次元のサイズ。整数値の行ベクトルとして指定します。このベクトルの各要素は対応する次元のサイズを示します。
いずれかの次元のサイズが
0
の場合、X
は空の配列です。いずれかの次元のサイズが負の場合、そのサイズは
0
として扱われます。2 番目より後の次元のサイズが 1 の場合、それらの次元は
randn
で無視されます。たとえば、randn([3 1 1 1])
では 3 行 1 列の乱数のベクトルが生成されます。
例: sz = [2 3 4]
は、2 x 3 x 4 の配列を作成します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
typename
— 作成するデータ型 (クラス)
"double"
(既定値) | "single"
作成するデータ型 (クラス)。"double"
または "single"
として指定するか、randn
をサポートする別のクラスの名前を指定します。
例: randn(5,"single")
p
— 作成する配列のプロトタイプ
数値配列
作成する配列のプロトタイプ。数値配列として指定します。
例: randn(5,"like",p)
データ型: single
| double
複素数のサポート: あり
s
— 乱数ストリーム
RandStream
オブジェクト
乱数ストリーム。RandStream
オブジェクトとして指定します。
例: s = RandStream("dsfmt19937"); randn(s,[3 1])
詳細
標準実数正規分布および標準複素数正規分布
ランダムな実数を生成する場合、関数 randn
は、次の標準正規分布に従うデータを生成します。
ここで、x は、平均が 0 で分散が 1 の実確率変数です。
コマンド randn(...,"like",1i)
を使用する際のようにランダムな複素数を生成する場合、関数 randn
は、次の標準複素数正規分布に従うデータを生成します。
ここで、z は複素確率変数であり、その実数部と虚数部は独立した正規分布 (平均が 0 で分散が 1/2) をとる確率変数です。
ヒント
randn
で生成された数列はrand
、randi
およびrandn
で使用される一様疑似乱数発生器の内部設定値によって定義されます。共有乱数発生器は、rng
を使用して制御できます。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
データ型 (クラス) は組み込みの MATLAB® 数値型でなければなりません。その他のクラスでは、静的
randn
メソッドは呼び出されません。たとえば、randn(sz,'myclass')
はmyclass.randn(sz)
を呼び出しません。サイズの引数は固定サイズでなければなりません。
ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
外部呼び出しが有効であり
randn
がparfor
ループ内部で呼び出されていない場合、生成された MEX ファイルは MATLAB と同じ乱数状態を逐次処理コードで使用します。それ以外の場合、生成された MEX コードとスタンドアロン コードは、MATLAB と同じ状態に初期化される独自の乱数状態を維持します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
ストリーム構文
randn(
は GPU ではサポートされません。s
,___)typename
を'gpuArray'
として指定できます。typename
を'gpuArray'
として指定する場合、配列の基となる型は既定ではdouble
になります。基となる型が
datatype
の GPU 配列を作成するには、typename
の前に追加の引数として基となる型を指定します。たとえば、X = randn(3,datatype,'gpuArray')
は、基となる型がdatatype
の乱数から成る 3 行 3 列の GPU 配列を作成します。基となる型
datatype
は次のオプションのいずれかとして指定できます。'double'
'single'
数値変数
p
についても、gpuArray
として指定できます。p
をgpuArray
として指定する場合、返される配列の基となる型はp
と同じになります。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
使用上の注意事項および制限事項:
ストリーム構文
randn(
はs
,___)codistributed
またはdistributed
の配列ではサポートされません。typename
を'codistributed'
または'distributed'
として指定できます。typename
を'codistributed'
または'distributed'
として指定する場合、返される配列の基となる型は既定ではdouble
になります。基となる型が
datatype
の分散配列または対話型分散配列を作成するには、typename
の前に追加の引数として基となる型を指定します。たとえば、X = randn(3,datatype,'distributed')
は、基となる型がdatatype
の乱数から成る 3 行 3 列の分散行列を作成します。基となる型
datatype
は次のオプションのいずれかとして指定できます。'double'
'single'
p
についても、codistributed
またはdistributed
の配列として指定できます。p
をcodistributed
またはdistributed
の配列として指定する場合、返される配列の基となる型はp
と同じになります。codistributed
の追加の構文の詳細については、randn (codistributed)
(Parallel Computing Toolbox) を参照してください。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入R2022a: "like"
による実数/複素数の一致と、RandStream
オブジェクトを指定した "like"
の使用
"like"
入力は、実数と複素数の両方のプロトタイプ配列をサポートします。以下に例を示します。
r = randn(2,2,"like",1i)
r = 0.3802 + 1.2968i 0.2254 - 0.9247i -1.5972 + 0.6096i -0.3066 + 0.2423i
この機能はすべての構文でサポートされています。また、RandStream
オブジェクトを randn
の最初の入力として、"like"
を使用することもできます。
R2014a: 'like'
を使って既存の変数のデータ型と一致させる
既存の変数と同じデータ型で乱数を生成するには、構文 randn(__,'like',p)
を使用します。以下に例を示します。
A = single(pi); r = randn(4,4,'like',A); class(r)
ans = single
RandStream
オブジェクトを最初の入力として randn
に渡す場合、この機能は使用できません。
R2013b: 非整数のサイズ入力はサポートなし
整数ではない次元を指定するとエラーが発生します。floor
を使用して、非整数のサイズ入力を整数に変換してください。
R2008b: 'seed'
、'state'
、'twister'
の入力は非推奨
これらの入力は rand
、randi
、randn
で使用される乱数発生器を制御するもので、削除の予定はありません。しかし以下の理由で、代わりに関数 rng
が推奨されます。
'seed'
および'state'
発生器には不具合がある。'seed'
および'state'
という用語は発生器についての誤解を招く。'seed'
は、シードの初期化値ではなく MATLAB v4 発生器を指す。'state'
は、発生器の内部状態ではなく v5 発生器を指す。これらの 3 つの入力は
rand
とrandn
に対し、必要もなく別々の発生器を使用する。
コードの更新の詳細については、rand と randn の非推奨構文の置換を参照してください。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)