【Python基礎】ヒストグラム用のガウス分布(正規分布)に従うランダムな値のリストを複数生成する方法

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

ランダムな値のリスト

前回、Pythonのmatplotlibでバイオリンプロット(Violin Plot)を描く方法を紹介しました。

今回はヒストグラム用のガウス分布(正規分布)に従うランダムな値のリストを複数生成する方法を紹介します。

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

for文で複数個のデータを作成

まずはfor文を使って複数個のデータを作成する方法です。

ガウス分布(正規分布)の作成は、前に記事で紹介した方法を用いています。

その際、繰り返しの回数を用いて、それぞれ異なる平均、標準誤差を持たせるように工夫しています。

import numpy as np
import matplotlib.pyplot as plt

data_size = 5

rng =np.random.default_rng(0)

data_list = []
for i in range(1, data_size+1):
    data = rng.normal(i**2, i, 10000)
    data_list.append(data)

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

for data in data_list:
    plt.hist(data, bins=100, alpha=0.7)

plt.show()

リスト内包表記を用いる方法

同様のことをリスト内包表記を使って書いてみます。

import numpy as np
import matplotlib.pyplot as plt

data_size = 5

rng =np.random.default_rng(0)

data_list = [rng.normal(i**2, i, 10000) for i in range(1, data_size+1)]

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

for data in data_list:
    plt.hist(data, bins=100, alpha=0.7)

plt.show()

実行結果

リスト内包表記と自作関数を用いる方法

ここまでは使用する関数はNumPy内の関数を用いてきました。

しかし複雑なことをしようとするとライブラリの関数(だけ)では対応できなくなり、分布の関数を自作して使うと言うことも考えられます。

その場合も、上述したリスト内包表記を用いた方法で対応することができます。

import numpy as np
import matplotlib.pyplot as plt

data_size = 5

def normal_random(mu, sigma, size):
    rng = np.random.default_rng(0)
    data = rng.normal(mu, sigma, size)
    return data

data_list = [normal_random(i**2, i, 10000) for i in range(1, data_size+1)]

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

for data in data_list:
    plt.hist(data, bins=100, alpha=0.7)

plt.show()

実行結果

次回はmatplotlibで離散データを表示するステムプロット(stem plot)を紹介します。

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

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

コメント

コメントする

目次