2012-04-13 12 views

Odpowiedz

100
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.mlab as mlab 
import math 

mu = 0 
variance = 1 
sigma = math.sqrt(variance) 
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100) 
plt.plot(x,mlab.normpdf(x, mu, sigma)) 
plt.show() 

gass distro, mean is 0 variance 1

+0

Dzięki za poprawkę, @platinor. – unutbu

+0

parametry twojego komputera są naprawdę dziwne! Lepiej zrobić '' 'x = np.linspace (mu - 4 * sigma, mu + 4 * sigma, 100)' '' – Amen

+0

@Amen: Tak, dzięki za poprawkę. – unutbu

29

nie istnieje, że jest to funkcja, która robi wszystko, co w jednym połączeniu. Jednak można znaleźć funkcję gęstości prawdopodobieństwa Gaussa w scipy.stats.

więc najprostszym sposobem mogłem wymyślić jest:

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

# Plot between -10 and 10 with .001 steps. 
x_axis = np.arange(-10, 10, 0.001) 
# Mean = 0, SD = 2. 
plt.plot(x_axis, norm.pdf(x_axis,0,2)) 

Źródła:

+2

Nie musisz używać rozumienia listy. 'norm.pdf' może działać na' numpy.array'. Możesz napisać 'plt.plot (range, norm.pdf (range, 0, 2))'. – Avaris

+0

@Avaris: To niesamowite, dzięki za napiwek. Zmieniono moją odpowiedź. – lum

+0

Powinieneś prawdopodobnie zmienić 'norm.pdf' na' norm (0, 1) .pdf'. Dzięki temu łatwiej jest dostosować się do innych przypadków/zrozumieć, że generuje on obiekt reprezentujący zmienną losową. –

5

Odpowiedź Unutbu jest poprawna. Ale poniewaz nasza średnia może być większa lub mniejsza od zera, jeszcze bym to zmienić:

x = np.linspace(-3 * sigma, 3 * sigma, 100) 

do tego:

x = np.linspace(-3 * sigma + mean, 3 * sigma + mean, 100) 
+1

Masz na myśli -3 * sigma + średnia, 3 * sigma + średnia? – SeF

1

Jeśli wolisz używać krok po kroku można rozważyć rozwiązanie takie jak:

import numpy as np 
import matplotlib.pyplot as plt 

mean = 0; std = 1; variance = np.square(std) 
x = np.arange(-5,5,.01) 
f = np.exp(-np.square(x-mean)/2*variance)/(np.sqrt(2*np.pi*variance)) 

plt.plot(x,f) 
plt.ylabel('gaussian distribution') 
plt.show()