NumPy
前回、PythonのNumPyとSciPyで正規分布(ガウス分布)に従うランダムな値を取得する方法を紹介しました。
![](https://3pysci.com/wp-content/uploads/2023/12/python-numpy20-5-300x228.png)
今回はNumPyでジェネレータを使ったランダムな数値の取得方法の紹介と使わない方法との比較を紹介します。
それでは始めていきましょう。
0から1までのランダムな数値を取得する方法
まずは0から1まででランダムな数値を取得する方法を紹介します。
ジェネレータを使う場合は「rng = np.random.default_rng()」としてインスタンスを生成し、「rng.random()」でランダムな数値を取得できます。
また引数に数値を与えるとその数値分のランダムな数値を、リストで複数の数値を与えると多次元リストとしてランダムな数値を取得できます。
import numpy as np
rng = np.random.default_rng()
print(rng.random())
print(rng.random(3))
print(rng.random([3, 3]))
実行結果
0.5047391430506909
[0.35913488 0.1996263 0.74376461]
[[0.29213661 0.34637999 0.01788079]
[0.98406792 0.06400037 0.80208745]
[0.5883613 0.53650282 0.50116796]]
ジェネレータを使わない場合は「np.random.random()」です。
import numpy as np
print(np.random.random())
print(np.random.random(3))
print(np.random.random([3, 3]))
実行結果
0.3833023234494225
[0.50190422 0.50039957 0.54963507]
[[0.52550087 0.19146621 0.21861701]
[0.44130657 0.41306553 0.99610341]
[0.81832337 0.03280216 0.91050022]]
ランダムシードを設定し、値を固定する方法
ランダムシードを設定し、値を固定するには「rng = np.random.default_rng(シード)」とします。
import numpy as np
cycle = 5
for _ in range(cycle):
rng = np.random.default_rng(42)
print(rng.random())
実行結果
0.7739560485559633
0.7739560485559633
0.7739560485559633
0.7739560485559633
0.7739560485559633
ジェネレータを使わない場合は「np.random.seed(シード)」をプログラムに挿入します。
import numpy as np
cycle = 5
for _ in range(cycle):
np.random.seed(42)
print(np.random.random())
実行結果
0.3745401188473625
0.3745401188473625
0.3745401188473625
0.3745401188473625
0.3745401188473625
範囲を指定し、ランダムな整数値を取得する方法
範囲を指定し、ランダムな整数値を取得する場合は「rng = np.random.default_rng()」でインスタンスを作成し、「rng.integers()」で取得します。
引数を1つ入れた場合は0からその値の一つ前までの間の整数値をランダムに取得します。
引数を2つ入れた場合は1つ目の引数から2つ目の引数の一つ前までの整数値をランダムに取得します。
引数を3つ入れた場合は1つ目の引数から2つ目の引数の一つ前までの整数値を3つ目の引数の数だけランダムに取得します。
import numpy as np
rng = np.random.default_rng()
print(rng.integers(5))
print(rng.integers(5, 10))
print(rng.integers(10, 20, 5))
実行結果
4
5
[19 15 17 17 14]
ジェネレータを使わない場合は「np.random.randint()」です。
import numpy as np
print(np.random.randint(5))
print(np.random.randint(5, 10))
print(np.random.randint(10, 20, 5))
実行結果
2
9
[14 16 19 12 16]
正規分布に従うランダムな値を取得する方法
正規分布に従うランダムな値を取得するには「rng = np.random.default_rng()」でインスタンスを作成し、「rng.normal()」で取得します。
import numpy as np
rng = np.random.default_rng()
print(rng.normal())
実行結果
-1.0930054098684203
ジェネレータを使わない場合は「np.random.normal()」です。
import numpy as np
print(np.random.normal())
実行結果
1.5792128155073915
次回は今回も少し出てきましたが、Randomモジュール、NumPy、SciPyでランダムな値を取得する際のランダムシードの設定方法を紹介します。
ではでは今回はこんな感じ。
コメント