16. NumPyでベクトル・行列計算

NumPyでのランダムな数値を含む配列の自動作成(random、seedなど)

更新日:

またデータ分析や機械学習では、ランダムな数値を含む配列の作成も必要になる時があります。NumPyではこれらの配列も自動作成する方法がいくつかあります。

 

NumPyでの一様な乱数の自動生成(random.rand)

random.randで、0〜1の一様な乱数を自動生成することができます。また引数を指定すれば、指定された数の乱数を生成することができます。

numpy.random.rand(出力件数)

 

まず初めに1個のランダムな数値を作成してみます。

In [1]: np.random.rand()
Out[1]: 0.2981253026948321

 

次に10個のランダムな数値で構成される配列を作成してみましょう。

In [2]: np.random.rand(10)
Out[2]: array([-0.30269993, -0.93349567, 0.35675231, -0.08893609, -1.48624833,
                      0.16062229, -0.32005524, -1.06643131, -0.65708759, 0.12498622])

 

ランダムな数値で3×4行列を作成する場合、引数に3,4を指定します。

In [3]: np.random.rand(3,4)
Out[3]: array([[-0.91843896, -0.25350911, -1.28415095, 0.76946882],
                      [ 0.20152048, 1.42848062, 0.61080922, -0.60720251],
                      [ 1.29016664, 0.35683667, -1.07647741, -0.71999436]])

 
 
 

NumPyでの標準正規分布に従う一様な乱数の自動生成(random.randn)

random.randnで、平均が0で標準偏差が1の標準正規分布に従う0〜1の一様な乱数を自動生成することができます。

numpy.random.randn(出力件数)

 

また平均、分散を指定したい場合は、normalを利用します。

numpy.random.normal(平均, 分散, 出力件数)

引数は省略することもできます。その場合、平均は0.0、分散は1.0、出力件数は1件で出力されます。

 

標準正規分布に従う10個の乱数で構成される配列を作成します。

In [4]: np.random.randn(10)
Out[4]: array([-0.6572115 , 0.41905626, -0.02836741, -0.07100919, 1.97248285,
                      2.25031808, 0.46432126, -0.46028787, 1.37601119, 1.6032506 ])

 

平均が50で分散が10の正規分布に従う乱数を10個出力してみます。

In [5]: np.random.normal(50, 10, 10)
Out[5]: array([ 46.82250514, 60.4098507 , 46.56665573, 46.03400171,
                      55.71524254, 44.10703383, 43.9838072 , 55.24751182,
                      48.81316645, 52.48095133])

 
 
 

NumPyでの指定範囲の整数の乱数自動生成(random.randint)

指定した範囲の整数の乱数を作成する場合、random.randintを利用します。

numpy.random.randint([開始値,] 終了値 [, 出力件数])

開始値 〜 終了値までの間で、出力件数分の整数を自動生成することができます。

出力件数はタプルで指定することもでき、その場合は、指定された形式の配列を作成します。

開始値、出力件数は省略することも可能です。その場合は、開始値は0から、出力件数は1件とみなされます。

また終了値はインデックスと同様、その数値は含まれません。

 

1~99までの間の整数を10件出力してみましょう。

In [6]: np.random.randint(1, 100, 10)
Out[6]: array([48, 32, 29, 2, 93, 11, 50, 16, 82, 13])

 

1~99までの間の整数で3×4行列を出力してみましょう。

In [7]: np.random.randint(1, 100, (3,4))
Out[7]: array([[2, 43, 67, 89],
                      [ 91, 67, 28, 71],
                      [ 55, 72, 82, 7]])

 
 
 

NumPyでの乱数の固定(random.seed)

乱数を用いる分析や処理において、再現性が必要な場合など、発生させる乱数をあらかじめ固定したい場合があります。その場合にseedを用いると、発生させる乱数を固定することができます。

numpy.random.seed(整数)

引数に整数を指定することで、同じ整数を指定した場合、同じ乱数が生成されます。

 

シードを指定した場合、しなかった場合の一連の例を見ていきましょう。

まずシードを100に設定し、乱数を1つ生成します。

In [8]: seed(100)
...: np.random.randn()
Out[8]: 0.2981253026948321

 

次に何も指定しないで乱数を生成すると、先ほどと異なる乱数が生成されます。

In [9]: np.random.randn()
Out[9]: 0.7103427339124173

 

最後に、先ほどと同じシード100を設定し、再度乱数を生成すると同じものが生成されることがわかります。

In [10]: seed(100)
...: np.random.randn()
Out[10]: 0.2981253026948321

 
 
 
著書の紹介です。


 

-16. NumPyでベクトル・行列計算

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.