ファイル
乱数
|
NumPy乱数
NumPy のモジュール「numpy.random」を使った乱数の生成方法を示します.
目次
はじめに
乱数とは
順序を持った複数の数値の並びで,その並びが推測できないものを言います.ただし,数値の密度 — 値が\(a\)と\(a+\diff a\) の間に入る確率 — は分布関数に従うことができます.複雑な自然現象のシミュレーションに,乱数が使われることがあります(モンテカルロ法).
Python の乱数
Python の乱数には,モジュール「random」と「numpy.random」があります.後者の方が多くの分布関数を備え,更に高速なので自然科学計算には向いています.ただし,前者にも良い面があります.例えば,以下のような場合です.
- random.choice(seq) シーケンス(リストやタプルなど)の中から,ランダムに要素を返します.
- random.shuffle(seq[, random]) シーケンスをシャッフルします.第二引数は\([0,\,1]\)の分布関数で,デフォルトは一様乱数です.
- random.randint(a, b) \(a\leq n\leq b\) のランダムな整数 \(n\) を返します.
これ以外は,numpy.random の方が優れていると思われます.
使ってみよう
正規分布の生成とプロットのプログラム(normal_dist.py)
001 # -*- coding:utf-8 -*-
002 import numpy as np
003 import matplotlib.pyplot as plt
004
005 # ----- 条件設定 -----
006 mu, sigma = 2.0, 2.0
007 N = 10000 # サンプル数
008 Nb = 100 # ヒストグラムプロットのビン数
009 min_x, max_x = mu-5*sigma, mu+5*sigma
010 dx = (max_x-min_x)/Nb # ビン幅
011
012
013 # ----- 正規分布乱数の生成と統計 -----
014 s = np.random.normal(mu, sigma, N)
015 av = np.mean(s)
016 std = np.std(s)
017
018
019 # ----- プロット作成 -----
020 x = np.linspace(min_x, max_x, 256)
021 y = 1/(sigma*np.sqrt(2*np.pi))*np.exp(-(x-mu)**2/(2*sigma**2))
022
023 plt.rcParams["font.size"] = 18
024 fig = plt.figure()
025 plot_1 = fig.add_subplot(1,1,1)
026 plot_1.set_xlim([min_x, max_x])
027 plot_1.text(0.1, 0.8, "$\mu$: {0:.3f}\n$\sigma$: {1:.3f}".\
028 format(av, std), transform=plot_1.transAxes,\
029 color='b')
030 plot_1.hist(s, Nb, range=(min_x, max_x))
031 plot_1.plot(x, N*dx*y, 'r-', linewidth=2)
032
033 plt.show()
034 fig.savefig('normal_dist.pdf', orientation='portrait', \
035 transparent=False, bbox_inches=None, frameon=None)
036 fig.clf()
様々な分布関数
numpy.random の分布関数
関数 (メソッド) |
内容 |
beta(a, b, size) |
ベータ分布.「beta(loc=alpha, b=beta, size=N)」.a: \(\alpha\),b: \(\beta\),size: 個数(マニュアル) |
binomial(n, p[, size]) |
二項分布 |
chisquare(df[, size]) |
カイ二乗分布 |
dirichlet(alpha[, size]) |
ディリクレ分布 |
exponential([scale, size]) |
指数分布 |
f(dfnum, dfden[, size]) |
F分布 |
gamma(shape[, scale, size]) |
ガンマ分布 |
geometric(p[, size]) |
幾何分布 |
gumbel([loc, scale, size]) |
ガンベル分布 |
hypergeometric(ngood, nbad, nsample[, size]) |
超幾何分布 |
laplace([loc, scale, size]) |
ラプラス分布(二重指数分布) |
logistic([loc, scale, size]) |
ロジスティック分布 |
lognormal([mean, sigma, size]) |
対数正規分布 |
logseries(p[, size]) |
対数級数分布 |
multinomial(n, pvals[, size]) |
多項分布 |
multivariate_normal(mean, cov[, size, ...) |
多次元正規分布 |
negative_binomial(n, p[, size]) |
負の二項分布 |
noncentral_chisquare(df, nonc[, size]) |
カイ二乗分布 |
noncentral_f(dfnum, dfden, nonc[, size]) |
noncentral F distribution (非中心F分布?) |
normal(loc, scale, size) |
正規分布 (ガウス分布).「normal(loc=mu, scale=sigma, size=N)」.loc: 平均,scale: 標準偏差,size: 個数.(マニュアル) |
pareto(a[, size]) |
パレート分布 |
poisson([lam, size]) |
ポアソン分布 |
power(a[, size]) |
指数ベキ分布 |
rayleigh([scale, size]) |
レイリー分布 |
standard_cauchy([size]) |
コーシー分布 |
standard_exponential([size]) |
指数分布 |
standard_gamma(shape[, size]) |
ガンマ分布 |
standard_normal([size]) |
正規分布 |
standard_t(df[, size]) |
t分布 |
triangular(left, mode, right[, size]) |
三角分布 |
uniform([low, high, size]) |
連続一様分布 |
vonmises(mu, kappa[, size]) |
フォン・ミーゼス分布 |
wald(mean, scale[, size]) |
Wald 分布(逆ガウス分布) |
weibull(a[, size]) |
ワイブル分布 |
zipf(a[, size]) |
ジップ分布 |
ページ作成情報
参考資料
更新履歴
|