NumPyでランダムな配列を作る方法

NumPy 乱数の配列


今回は、Python3でNumPyを使ってランダムな配列を作る方法について。

NumPyでランダムな配列を作るには、randomモジュール使う。

NumPyのrandomモジュールを使うと、多次元の乱数配列が簡単に作れる。また、普通の乱数だけではなく二項分布や正規分布などに従う乱数も簡単に作ることができる。


0.0〜1.0までの乱数

まずは基本から。

0.0〜1.0まで乱数を生成するには、random.rand()を使う。

1つの乱数

random.randは、引数に何も指定しないと0.0〜1.0までの乱数を1つ生成する。
>>> import numpy as np
>>> np.random.rand()
0.3206912646250172

乱数の配列

乱数の配列を生成するには、引数に生成する配列の要素数を指定する。
>>> import numpy as np
>>> np.random.rand(5)
array([ 0.43754386,  0.79697686,  0.33764738,  0.32605006,  0.38854726])

2次元配列

2次元の配列を作成するには、1つ目の引数に行数、2つ目の引数に列数を指定する。
>>> import numpy as np
>>> np.random.rand(3,2)
array([[ 0.95255422,  0.58786127],
       [ 0.60225967,  0.5894357 ],
       [ 0.5663725 ,  0.94472823]])
同じ要領で、指定する引数を増やすと多次元の配列を作ることができる。


整数の乱数

random.randintを使うと整数の乱数を生成することがてきる。

ランダムな1つの整数

random.randintに引数を1つ指定すると、0から引数で指定した値より小さい乱数が1つ生成される。
#0〜99の乱数を1つ生成
>>> import numpy as np
>>> np.random.randint(100)
61
random.randintに引数を2つ指定すると、1つ目の引数の値から2つ目の引数の値より小さい範囲内の乱数が生成される。
#80〜99の乱数を1つ生成
>>> import numpy as np
>>> np.random.randint(80,100)
84

ランダムな整数の配列

乱数の配列を作るには、random.randintの3つ目の引数に配列の要素数を指定する。
整数の乱数の配列を作る書式は以下の通り
random.randint(最小値, 最大値, 要素数)
#0〜29までの値で要素数10の配列を作る
>>> import numpy as np
>>> np.random.randint(0,30,10)
array([14, 29, 20, 25,  8,  8, 17, 18, 11, 16])

ランダムな整数の2次元配列

乱数の2次元配列を作るには、random.randintの3つ目の引数に行数と列数を指定する。
ランダムな整数の2次元配列を生成する書式は以下の通り。
random.randint(最小値, 最大値, (行数, 列名))
#0〜29の値で5行3列の2次元配列を作る
>>> import numpy as np
>>> np.random.randint(0,30,(5,3))
array([[10,  4,  9],
       [21, 11, 13],
       [15,  9,  9],
       [ 8, 14, 29],
       [ 5, 23,  8]])
行数と列数を指定するタプルの要素は、1つ目の要素がrandintで作る配列の1次元目の要素数、タプルの2つ目の要素がrandintで作る配列の2次元目の要素数を表している。

同じ要領でタプルの要素数を増やすと、randintで多次元の配列を作ることができる。


二項分布に従う乱数




二項分布に従う乱数を作るにはrandom.binomialを使う。

random.binomialの書式は以下の通り。
random.binomial(n, p, size=None)

nは試行回数、pは確率、sizeは要素数。
sizeはデフォルトではNoneなので、何も指定しなければ試行回数n、確率pに従う乱数が1つだけ生成される。

sizeに値を指定すれば、指定した要素数の乱数の配列が作られる。sizeは、(1次元の要素数, 2次元の要素数, 3次元の・・・)と指定することで多次元の配列を作ることもできる。

二項分布の乱数

試行回数n=100、確率p=0.5の二項分布に従う乱数を生成。
>>> import numpy as np
>>> np.random.binomial(100,0.5)
53

二項分布の配列

試行回数n=100、確率p=0.5の二項分布に従う乱数の配列(要素数5)を生成。
>>> import numpy as np
>>> np.random.binomial(100,0.5,5)
array([37, 55, 47, 43, 43])

二項分布の2次元配列

試行回数n=100、確率p=0.5の二項分布に従う乱数の2次元配列(3行5列)を生成。
>>> import numpy as np
>>> np.random.binomial(100,0.5,(3,5))
array([[51, 44, 50, 44, 48],
       [48, 55, 52, 54, 48],
       [57, 51, 47, 48, 46]])


標準正規分布に従う乱数

標準正規分布に従う乱数を生成するのには、random.randnを使う。
random.randn()は、引数を省略すると乱数を1つ生成し、引数を1つ指定すると1次元の配列、2つ指定すると2次元配列、3つ指定すると・・・、となる。

標準正規分布に従う乱数

標準正規分布に従う乱数を1つ作成する
>>> import numpy as np
>>> np.random.randn()
-0.8759046227014219

標準正規分布の配列

標準正規分布に従う乱数の配列を作成する。
>>> import numpy as np
>>> np.random.randn(3)
array([-0.87213573, -0.47031267, -0.48660211])

標準正規分布の多(2)次元配列

標準正規分布に従う乱数の2次元配列を作る。
>>> import numpy as np
>>> np.random.randn(3,2)
array([[-1.33752716,  0.45691713],
       [ 2.02583465, -0.96738248],
       [-2.35904115, -0.51939806]])

standard_normal

numpyにはrandn以外にも標準正規分布の乱数を作ることができるstandard_normalが用意されている。
randnとstandard_normalの違いは、standard-normalは引数にタプルを用いるという点。
タプルの1つ目の要素が配列の1次元の要素数、2つ目の要素が配列の2次元目の要素数となる。3つ目以降の要素も同様に、タプルの要素で配列の要素数を指定できる。
なお、standard_normalで1次元の配列を作る場合は、タプルではなく、作成する配列の要素数をそのまま指定すればいい。引数を何も指定しないと乱数が1つ作成される。

standard_normalで3行2列の配列を作る

>>> np.random.standard_normal((3,2))
array([[ 0.20172841, -0.58289815],
       [ 1.08015441,  0.71181575],
       [ 1.1384838 , -1.44662731]])


正規分布に従う乱数

標準正規分布ではない乱数を求める場合、標準偏差を掛けて平均を足せばいいわけだが、もっと簡単に求める方法も用意されている。

random.normalを使うと簡単に正規分布に従う乱数を作ることができる。

random.normalは、1つ目の引数に平均、2つ目の引数に標準偏差、3つ目の引数に配列のサイズを指定する。

サイズは指定しないと1つの乱数が生成される。2次元以上の配列を作成する場合はタプルを用いて各次元の要素数数を指定する。

random.normalの使いかた

平均50、標準偏差10の乱数で2行3列の配列を作る。
>>> np.random.normal(50,10,(2,3))
array([[ 36.07064677,  53.29840725,  25.45235303],
       [ 54.8443586 ,  43.4162752 ,  58.28364767]])


以上、NumPyで乱数の配列を作る方法について。



NumPyには、他にもたくさんの種類の乱数が用意されている。

今後、少しずつ他の確率分布の乱数にも触れていきたい。

今回はここまで


0 件のコメント :