【NumPy, SciPy】正規分布(ガウス分布)に従うランダムな値を取得する方法[Python]

  • URLをコピーしました!
目次

Random、NumPy、SciPy

前回、Pythonのmatplotlibでギリシャ文字を表示する方法を紹介しました。

今回はRandomモジュール、NumPy、SciPyの3種で正規分布(ガウス分布)に従うランダムな値を取得する方法を紹介します。

それでは始めていきましょう。

Randomモジュールの場合

Randomモジュールを用いる場合、「random.gauss(mu, sigma)」でで正規分布に従うランダムな値を取得できます。

import random

print(random.gauss(0, 1))

実行結果
-1.5371829296125312

一つの値だけでは正規分布に従っているか分からないので、たくさん取得し、ヒストグラムを描いてみます。

import random
import matplotlib.pyplot as plt

x = range(1000000)
y = [random.gauss(0, 1) for _ in x]

fig = plt.figure()
plt.clf()

plt.hist(y, bins=100)

plt.show()

実行結果

ちなみに「random.normalvariate(mu, sigma)」でも正規分布に従うランダムな値を取得することができます。

import random

print(random.normalvariate(0, 1))

実行結果
0.8381527170880502
import random
import matplotlib.pyplot as plt

x = range(1000000)
y = [random.normalvariate(0, 1) for _ in x]

fig = plt.figure()
plt.clf()

plt.hist(y, bins=100)

plt.show()

実行結果

NumPyの場合

NumPyの場合はまず「rng = np.random.default_rng()」でジェネレータのインスタンスを生成し、「rng.normal(mu, sigma, size)」でランダムな値のリストを生成します。

import numpy as np

rng = np.random.default_rng()
print(rng.normal(0, 1, 5))

実行結果
[ 1.14280621 -0.90061618  0.66710664 -1.13582515 -2.22449659]

先ほどの「random.gauss()」とは異なり、直接複数の値をリストとして作成することができます。

import numpy as np
import matplotlib.pyplot as plt

x = range(1000000)

rng = np.random.default_rng()
y = rng.normal(0, 1, len(x))

fig = plt.figure()
plt.clf()

plt.hist(y, bins=100)

plt.show()

実行結果

SciPyの場合

SciPyの場合は「scipyのstats」をインポートし、「stats.norm.rvs(mu, sigma, size)」で正規分布に従うランダムな値のリストを作成できます。

from scipy import stats

print(stats.norm.rvs(0, 1, 5))

実行結果
[-0.40377819 -0.23260934  0.32406025  0.39979899  0.49024652]
from scipy import stats
import matplotlib.pyplot as plt

x = range(1000000)
y = stats.norm.rvs(0, 1, len(x))

fig = plt.figure()
plt.clf()

plt.hist(y, bins=100)

plt.show()

実行結果

今回は正規分布(ガウス分布)に従うランダムな値の取得方法を紹介しましたが、それぞれのライブラリにおいて他の分布に従うランダムな値の取得ができる関数が存在します。

もし気になったら調べてみてください。

次回はNumPyでジェネレータを使ったランダムな数値の取得方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次