質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

1回答

1897閲覧

ポアソン分布のグラフ表示がうまく表示されません

kaggle777

総合スコア24

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

1クリップ

投稿2021/01/27 20:54

ポアソン分布のグラフを実装していたところ平均値であるλが10の時だけグラフの点がうまく表示されません。具体的には下の二つの図が違うという事です。(最後の方が違う)
内部的な点の値はあっているのですが点がプロットされない原因が分かる方、教えて下さると光栄です。プログラムも載せておきます。

これが実行結果です。
イメージ説明
また次のグラフが本当のグラフです。
イメージ説明

ここからはコードを載せます。

Python

1#λは平均, kはその時の値。 2#つまりポアソン分布は平均λの場合にkの値が出る確率 3def poason(k, λ): 4 if type(k)==int: 5 sum=1 6 for j in range(1,k+1): 7 sum = sum*j 8 return np.e**(-λ)*(λ**k)/sum 9 else: 10 a = np.zeros(len(k)) #aを作らずにkに代入しても良いがkはnp.arangeで作っているため整数しか入らない. そのためaを作成 11 for i in range(len(k)): 12 sum = 1 13 for j in range(1,k[i]+1): 14 sum = sum*j 15 a[i]=np.e**(-1*λ)*(λ**k[i])/sum 16 return a 17 18 19import matplotlib.pyplot as plt 20import numpy as np 21 22fig, ax = plt.subplots(figsize=(10,6)) 23 24k = np.arange(21) 25p1 = poason(k, 1) #λが1の場合のグラフ 26p2 = poason(k, 4) #λが4の場合のグラフ 27p3 = poason(k,10) #λが10の場合のグラフ 28 29c1, c2, c3 = "blue", "green", "red" #各プロットの色 30l1, l2, l3 = "λ=1", "λ=4", "λ=10" #各ラベル 31 32ax.set_xlabel("k", fontsize=20) #x軸ラベル 33ax.set_ylabel("p(x=k)", fontsize=20) #y軸ラベル 34ax.set_title("Poisson distribution", fontsize=20) #グラフタイトル 35 36ax.grid() #罫線(けいせん)。縦と横の細い線 37 38ax.plot(k, p1, marker = "o", color = c1, label = l1) 39ax.plot(k, p2, marker = "o", color = c2, label = l2) 40ax.plot(k, p3, marker = "o", color = c3, label = l3) 41 42#xの目盛りを作る(まあ作らなくても良いがfigsizeなど指定するには必要)目盛りの大きさのみ変えるだけなら一行で書ける。yは一行。 43i=0 44xtick = np.zeros(1) 45while (i<21): 46 if i%5==0: 47 xtick = np.append(xtick,i) 48 i +=1 49 50ax.set_xticks(xtick) #これでx軸の目盛りの個数と大きさは分かった。z残念ながらここにfontizeはない 51ax.set_xticklabels(xtick, fontsize=15) #第一引数はラベルであるので"A"などの名前でも良い。ここでfontsize指定できる 52 53ax.tick_params(axis='y',labelsize=15) #このように目盛りの大きさだけならこれで変えられる 54 55ax.legend(loc=0, fontsize=20) #凡例表示。線の説明。locは場所。0の場合は右上 56fig.tight_layout() 57 58plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

32ビット整数を使って計算しているためです。
poason関数の定義を以下に変更すれば、期待している結果になります。

python

1def poason(k, λ): 2 if type(k)==int: 3 sum=1 4 for j in range(1,k+1): 5 sum = sum*j 6 return np.e**(-λ)*(λ**k)/sum 7 else: 8 a = np.zeros(len(k)) #aを作らずにkに代入しても良いがkはnp.arangeで作っているため整数しか入らない. そのためaを作成 9 for i in range(len(k)): 10 sum = 1 11 for j in range(1,k[i]+1): 12 sum = sum*j 13 a[i]=np.e**(-1*λ)*(λ**int(k[i]))/sum 14 return a 15

投稿2021/01/27 23:04

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaggle777

2021/01/28 09:57

丁寧な解説ありがとうございます。たしかに32bit整数のまま計算すると小数点が多い場合に格納できないですね。とても勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問