Main Content

randn

説明

X = randn は標準正規分布から取り出された乱数スカラーを返します。

X = randn(n) は、正規分布乱数からなる nn 列の行列を返します。

X = randn(sz1,...,szN) は、sz1 x ... x szN の乱数の配列を返します。sz1,...,szN はそれぞれの次元のサイズを示します。たとえば、randn(3,4) は 3 行 4 列の行列を返します。

X = randn(sz) は、乱数の配列を返します。サイズ ベクトル szsize(X) を定義します。たとえば、randn([3 4]) は 3 行 4 列の行列を返します。

X = randn(___,typename) は、データ型が typename の乱数の配列を返します。typename の入力値は "single" または "double" です。前述の構文の入力引数のいずれかを使用できます。

X = randn(___,"like",p) は、p のような、すなわちデータ型および実数/複素数の区別が p と同じである、乱数の配列を返します。typename または "like" のどちらか一方のみを指定できます。

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 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

より一般的な複素数正規分布を指定するには、平均と共分散行列を定義します。たとえば、平均を μ=1+2i として指定し、共分散行列を σ=[σxxσxyσyxσyy]=[2-2-24] として指定します。

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

入力引数

すべて折りたたむ

正方行列のサイズ。整数値として指定します。

  • n0 の場合、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 x 3 x 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 は、平均が 0 で分散が 1 のランダムな実数変数 x に対し、標準正規分布

f(x)=12πex2/2

に従うデータを生成します。

コマンド randn(...,"like",1i) を使用する際のようにランダムな複素数を生成する場合、関数 randn は、平均が 0 で分散が 1/2 の、実数部と虚数部が独立した正規分布の確率変数であるランダムな複素変数 z に対し、標準複素数正規分布

f(z)=1πe|z|2

に従うデータを生成します。

ヒント

  • randn で生成された数列は randrandi および randn で使用される一様疑似乱数発生器の内部設定値によって定義されます。共有乱数発生器は、rng を使用して制御できます。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する

R2013b 以降はエラー

R2008b 以降は非推奨