matplotlibで二項分布を表示する(だけ)
先の記事で書いたコードだけどnumpy.random.binomial()で実際にサンプリングした数字からなるリストを作ってそっからヒストグラムつくるみたいなよく考えたら(よく考えなくても)頭悪いことしてたの今更気づいて、自分で単純なベルヌーイ試行だっつってんだからそのまま二項分布のグラフ書けばいいじゃねえかと思って書いた
range(x)が0から始まるリストを返すのにだけ気をつけて書くとこんな感じ
import matplotlib.pyplot as plt import scipy.misc as scm #組合せ計算用 p = 1.5/100 #レジェンド pack = 50 time = pack*8 def unko(): aaa = [] for j in range(time-1): elm = scm.comb(time,j) * (p**(j)) * ((1-p)**(time-j)) aaa.append(elm) print(aaa,sum(aaa)) #表示される数は*100すると%表示になる。そっちのが見やすいか? plt.plot(aaa) unko()
[0.014428036055035228, 0.043833398877860821, 0.088556816007048775, 0.13384665972638971, (以下略)
1.0
オッ
import matplotlib.pyplot as plt import scipy.misc as scm #組合せ計算用 p = 1.5/100 #レジェンド pack = 50 time = pack*8 def unko(): aaa = [] for j in range(time-1): elm = scm.comb(time,j) * (p**(j)) * ((1-p)**(time-j)) aaa.append(elm) print(aaa,sum(aaa)) #表示される数は*100すると%表示になる。そっちのが見やすいか? plt.plot(aaa) plt.xlim([0,20]) #x軸を0から20までに絞る unko()
<
ちなみにこの50パックという数字は9800円課金してそのままガチャ回した時の確率である
この分布の平均と標準偏差はそれぞれ
m = time*p s = (time*p*(1-p))**(1/2) print(m-s,m+s)
3.5689508437713564 8.431049156228644
なので諭吉放りこむとおよそ3回に2回は3~8枚引ける計算になる
これやっぱリセマラすべきなんじゃ…