ページへ戻る
印刷
Python/正規分布に従う乱数を生成する
をテンプレートにして作成 ::
NJF Wiki
xpwiki
:Python/正規分布に従う乱数を生成する をテンプレートにして作成
開始行:
*はじめに
Pythonでは正規分布(ガウス分布)に従う乱数を発生させる方...
普通の一様な乱数よりは使用頻度は低いものの、正規分布は誤...
そのため、統計関係のテストデータの作成などにこの機能が使...
また、グラフィックなどで自然な形で集中したランダムな点を...
自分で実装するのもそう難しくはないのですが、少し面倒なの...
&font(u){注意};:Pythonの正規分布の上側確率などを求める方...
*random.gauss
生成するにはrandom.gaussを使います。
例えば、標準正規分布に従う乱数を生成するには以下のように...
import random
print(random.gauss(0,1))
結果:
-1.5001413318395698
など。
第一引数が平均値で第二引数が標準偏差です。
他にほぼ同様のメソッドとしてrandom.normalvariateがありま...
使い方も全く同じで第一引数が平均値で第二引数が標準偏差で...
ただし、gaussの方が高速で動作します。normalvariateはスレ...
一つだけ生成しても実際に正規分布になっているかどうか分か...
import random
dataCnt = {}
for i in range(100000):
d = round(random.gauss(0,1),1)
if d in dataCnt:
dataCnt[d] += 1
else:
dataCnt[d] = 1
sortedData = sorted(dataCnt.items())
for k in sortedData:
print("%.2f\t%d" % (k[0],k[1]))
この結果を表計算ソフトに貼り付けてグラフを描くと次のよう...
&ref(chart.png,mw:480,mh:360);
乱数なので少しばらつきがありますが、ほぼ正規分布になって...
Pythonにはこれ以外にも、対数分布、ガンマ分布やパレート分...
詳しくは[[こちらのドキュメント:https://docs.python.org/ja...
*おまけ:中心極限定理と一様分布から標準正規分布に従うラン...
計算コストが高くて実用性はないのですが、一様分布と中心極...
中心極限定理とは、母集団の分布が何であれそこから抽出され...
[[Wikipedia 中心極限定理:https://ja.wikipedia.org/wiki/%E...
そこで、たいていのプログラミング言語に実装されているラン...
区間(a,b)の一様分布の平均は(b-a)/2、分散は(b-a)^2/12と分...
nを100として、標準正規分布に従うランダムな数を返す関数を...
def cltRandom():
n = 100
sqr3 = 2 * math.sqrt(3*n)
x = 0
for i in range(n):
x += (random.random() - 0.5) * sqr3
return x / n
これを前節と同じように100,000回実行して小数第二位で四捨五...
&ref(chartClt.png,mw:480,mh:360);
前節のグラフとほぼ同じになり、予想通り標準正規分布に従っ...
この関数は、100回も乱数を生成するので実行速度はかなり遅く...
しかし、中心極限定理を実際に確かめられる簡単な例となって...
終了行:
*はじめに
Pythonでは正規分布(ガウス分布)に従う乱数を発生させる方...
普通の一様な乱数よりは使用頻度は低いものの、正規分布は誤...
そのため、統計関係のテストデータの作成などにこの機能が使...
また、グラフィックなどで自然な形で集中したランダムな点を...
自分で実装するのもそう難しくはないのですが、少し面倒なの...
&font(u){注意};:Pythonの正規分布の上側確率などを求める方...
*random.gauss
生成するにはrandom.gaussを使います。
例えば、標準正規分布に従う乱数を生成するには以下のように...
import random
print(random.gauss(0,1))
結果:
-1.5001413318395698
など。
第一引数が平均値で第二引数が標準偏差です。
他にほぼ同様のメソッドとしてrandom.normalvariateがありま...
使い方も全く同じで第一引数が平均値で第二引数が標準偏差で...
ただし、gaussの方が高速で動作します。normalvariateはスレ...
一つだけ生成しても実際に正規分布になっているかどうか分か...
import random
dataCnt = {}
for i in range(100000):
d = round(random.gauss(0,1),1)
if d in dataCnt:
dataCnt[d] += 1
else:
dataCnt[d] = 1
sortedData = sorted(dataCnt.items())
for k in sortedData:
print("%.2f\t%d" % (k[0],k[1]))
この結果を表計算ソフトに貼り付けてグラフを描くと次のよう...
&ref(chart.png,mw:480,mh:360);
乱数なので少しばらつきがありますが、ほぼ正規分布になって...
Pythonにはこれ以外にも、対数分布、ガンマ分布やパレート分...
詳しくは[[こちらのドキュメント:https://docs.python.org/ja...
*おまけ:中心極限定理と一様分布から標準正規分布に従うラン...
計算コストが高くて実用性はないのですが、一様分布と中心極...
中心極限定理とは、母集団の分布が何であれそこから抽出され...
[[Wikipedia 中心極限定理:https://ja.wikipedia.org/wiki/%E...
そこで、たいていのプログラミング言語に実装されているラン...
区間(a,b)の一様分布の平均は(b-a)/2、分散は(b-a)^2/12と分...
nを100として、標準正規分布に従うランダムな数を返す関数を...
def cltRandom():
n = 100
sqr3 = 2 * math.sqrt(3*n)
x = 0
for i in range(n):
x += (random.random() - 0.5) * sqr3
return x / n
これを前節と同じように100,000回実行して小数第二位で四捨五...
&ref(chartClt.png,mw:480,mh:360);
前節のグラフとほぼ同じになり、予想通り標準正規分布に従っ...
この関数は、100回も乱数を生成するので実行速度はかなり遅く...
しかし、中心極限定理を実際に確かめられる簡単な例となって...
ページ名: