31

平均および標準偏差のパラメーター値(μ、σ)=(-1、1)、(0、2)、および(2、3)を使用して、1次元ガウス分布関数のプロットを作成するにはどうすればよいですか?

Pythonを使用したプログラミングは初めてです。

前もって感謝します!

4

5 に答える 5

57

優れたパッケージmatplotlibnumpy

from matplotlib import pyplot as mp
import numpy as np

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))

x_values = np.linspace(-3, 3, 120)
for mu, sig in [(-1, 1), (0, 2), (2, 3)]:
    mp.plot(x_values, gaussian(x_values, mu, sig))

mp.show()

次のようなものを生成します matplotlibによって生成された1次元ガウス分布を示すプロット

于 2013-02-14T16:54:43.463 に答える
20

Pythonで統計分布の関数を使用する方法については、このチュートリアルを読むことができます。 https://docs.scipy.org/doc/scipy/tutorial/stats.html

from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np 

#initialize a normal distribution with frozen in mean=-1, std. dev.= 1
rv = norm(loc = -1., scale = 1.0)
rv1 = norm(loc = 0., scale = 2.0)
rv2 = norm(loc = 2., scale = 3.0)

x = np.arange(-10, 10, .1)

#plot the pdfs of these normal distributions 
plt.plot(x, rv.pdf(x), x, rv1.pdf(x), x, rv2.pdf(x))
于 2013-11-06T21:31:29.517 に答える
18

元の構文に基づいて正しく正規化された正しい形式は次のとおりです。

def gaussian(x, mu, sig):
    return 1./(np.sqrt(2.*np.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)
于 2015-10-28T13:21:59.907 に答える
8

以前の回答に加えて、最初に指数で比率を計算し、次に2乗することをお勧めします。

def gaussian(x,x0,sigma):
  return np.exp(-np.power((x - x0)/sigma, 2.)/2.)

このようにして、非常に小さい数または非常に大きい数のガウス分布を計算することもできます。

In: gaussian(1e-12,5e-12,3e-12)
Out: 0.64118038842995462
于 2015-05-03T16:24:17.433 に答える
7

gaussian()関数の分母に括弧がありません。今のところ、2で割り、分散(sig ^ 2)を掛けます。しかし、それは真実ではありません。プロットからわかるように、分散が大きいほど、ガウス分布は狭くなります。これは間違っているので、反対のはずです。

したがって、gaussian()関数を次のように変更するだけです。

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
于 2013-06-26T22:07:21.160 に答える