randn
正規分布した乱数
構文
説明
は標準正規分布から取り出された乱数スカラーを返します。X = randn
は、X = randn(sz1,...,szN)sz1×...×szN の乱数の配列を返します。sz1,...,szN はそれぞれの次元のサイズを示します。たとえば、randn(3,4) は 3 行 4 列の行列を返します。
は、既定のグローバル ストリームの代わりに、乱数ストリーム 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×2×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 = 1×4 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 = 2×2 single matrix
0.5377 -2.2588
1.8339 0.8622
class(X)
ans = 'single'
R2022a 以降
標準複素数正規分布からランダムな複素数を 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
R2022a 以降
既定では、randn(__,like=1i) は標準複素数正規分布から乱数を生成します。実数部と虚数部は独立した正規分布の確率変数で、平均が 0、分散が 1/2 です。2 次元確率変数 の共分散行列は [1/2 0; 0 1/2] です。この既定の動作を示すために、randn を使用して 50,000 個の乱数を生成し、それらの共分散を計算します。
n = 50000; z = randn(n,1,like=1i); cov_z = cov(real(z),imag(z),1)
cov_z = 2×2
0.4980 0.0007
0.0007 0.4957
特定の平均と共分散をもつより一般的な複素数正規分布から乱数を生成するには、既定の分布から生成されたデータを変換します。ゼロ平均で単位共分散行列をもつ正規分布に従う "N" 次元確率変数 について、 を に変換できます。変数 は、平均 で対称正定値の共分散行列 をもつ正規分布に従います。たとえば、平均を として指定し、共分散行列を として指定します。
mu = 1 + 2i; sigma = [2 -2; -2 4];
共分散行列のコレスキー分解を実行します。結果は sigma = R'*R となる上三角行列 R です。元の分布内の実数部と虚数部の分散が 1/2 であるため、さらに sqrt(2) の係数を適用して元のデータをスケーリングします。その後、スケーリングされたデータを指定した平均にシフトします。
R = chol(sigma); z_scaled = sqrt(2)*[real(z) imag(z)]*R*[1; 1i]; y = mu + z_scaled;
生成された最初の 10 個の複素数を表示します。
y(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が0の場合、Xは空の行列です。nが負の場合、0として扱われます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
各次元のサイズ。整数値の個別の引数として指定します。
いずれかの次元のサイズが
0の場合、Xは空の配列です。いずれかの次元のサイズが負の場合、そのサイズは
0として扱われます。2 番目より後の次元のサイズが 1 の場合、それらの次元は
randnで無視されます。たとえばrandn(3,1,1,1)では 3 行 1 列の乱数のベクトルが生成されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
各次元のサイズ。整数値の行ベクトルとして指定します。このベクトルの各要素は対応する次元のサイズを示します。
いずれかの次元のサイズが
0の場合、Xは空の配列です。いずれかの次元のサイズが負の場合、そのサイズは
0として扱われます。2 番目より後の次元のサイズが 1 の場合、それらの次元は
randnで無視されます。たとえば、randn([3 1 1 1])では 3 行 1 列の乱数のベクトルが生成されます。
例: sz = [2 3 4] は、2×3×4 の配列を作成します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
作成するデータ型 (クラス)。"double" または "single" として指定するか、randn をサポートする別のクラスの名前を指定します。
例: randn(5,"single")
作成する配列のプロトタイプ。数値配列として指定します。
例: randn(5,like=p)
データ型: single | double
複素数のサポート: あり
乱数ストリーム。RandStream オブジェクトとして指定します。
例: s = RandStream("dsfmt19937"); randn(s,[3 1])
出力引数
出力配列。スカラー、ベクトル、行列または多次元配列として返されます。
詳細
ランダムな実数を生成する場合、関数 randn は、次の標準正規分布に従うデータを生成します。
ここで、x は、平均が 0 で分散が 1 の実確率変数です。
コマンド randn(...,like=1i) を使用する際のようにランダムな複素数を生成する場合、randn 関数は、次の標準複素数正規分布に従うデータを生成します。
ここで、z は複素確率変数であり、その実数部と虚数部は独立した正規分布 (平均が 0 で分散が 1/2) をとる確率変数です。
randn の基礎となる数値発生器は疑似乱数発生器です。これは、ランダムに見える決定論的な数列を作成します。これらの数値は、シードと発生器の決定性アルゴリズムがわかっていれば予測可能です。生成される数値は、完全にランダムではありませんが、ランダム性のさまざまな統計テストに合格し、独立同一分布 (i.i.d.) の条件を満たしており、"疑似乱数" という名前にふさわしいものとなります。
拡張機能
使用上の注意および制限:
使用する場合、入力引数
typenameは"double"、"single"、"int8"、"uint8"、"int16"、"uint16"、"int32"、"uint32"、または"logical"でなければなりません。他のクラスはサポートされません。たとえクラスが静的なrandnメソッドを定義していても対象外です。使用する場合、サイズの引数
n、sz、およびsz1,...,szNは固定サイズでなければなりません。コード ジェネレーターは、単精度出力を計算するために倍精度演算を使用します。
ほとんどの場合、生成された MEX ファイルは MATLAB® と同じ乱数状態を使用します。ただし、外部呼び出しを無効にした場合や
parforループ内からrandnを呼び出した場合、生成された MEX コードおよびスタンドアロン コードはそれぞれ独自の乱数状態を保持し、MATLAB 既定値 (rng(0,"twister")) に初期化されます。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
randn 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
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 でストリーム構文
randn(を使用するには、s,___)sはparallel.gpu.RandStream(Parallel Computing Toolbox) オブジェクトでなければなりません。
詳細については、GPU での MATLAB 関数の実行 (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 より前に導入名前と値の引数 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 を使用することもできます。
既存の変数と同じデータ型で乱数を生成するには、構文 randn(__,'like',p) を使用します。以下に例を示します。
A = single(pi); r = randn(4,4,'like',A); class(r)
ans = single
RandStream オブジェクトを最初の入力として randn に渡す場合、この機能は使用できません。
整数ではない次元を指定するとエラーが発生します。floor を使用して、非整数のサイズ入力を整数に変換してください。
これらの入力は rand、randi、randn で使用される乱数発生器を制御するもので、削除の予定はありません。しかし以下の理由で、代わりに関数 rng が推奨されます。
'seed'および'state'発生器には不具合がある。'seed'および'state'という用語は発生器についての誤解を招く。'seed'は、シードの初期化値ではなく MATLAB v4 発生器を指す。'state'は、発生器の内部状態ではなく v5 発生器を指す。これらの 3 つの入力は
randとrandnに対し、必要もなく別々の発生器を使用する。
コードの更新の詳細については、rand と randn の非推奨構文の置換を参照してください。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)