2012-04-13 19 views

risposta

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

Grazie per la correzione, @platinor. – unutbu

+0

i tuoi parametri linspace sono davvero strani! Meglio fare '' 'x = np.linspace (mu - 4 * sigma, mu + 4 * sigma, 100)' '' – Amen

+0

@Amen: Sì, grazie per la correzione. – unutbu

29

io non ci credo che è una funzione che fa tutto questo in una sola chiamata. Tuttavia è possibile trovare la funzione di densità di probabilità gaussiana in scipy.stats.

Quindi il modo più semplice che potevo venire in mente è:

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)) 

Fonti:

+2

Non è necessario utilizzare la comprensione degli elenchi. 'norm.pdf' può funzionare su' numpy.array'. Quindi, puoi scrivere 'plt.plot (range, norm.pdf (range, 0, 2))'. – Avaris

+0

@Avaris: è fantastico, grazie per il suggerimento. Modificato la mia risposta. – lum

+0

Probabilmente dovresti cambiare 'norm.pdf' in' norma (0, 1) .pdf'. Ciò semplifica l'adattamento ad altri casi/per comprendere che ciò genera un oggetto che rappresenta una variabile casuale. –

5

La risposta di Unutbu è corretta. Ma siccome il nostro media può essere più o meno di zero Vorrei ancora cambiare questo:

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

a questo:

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

Vuoi dire -3 * sigma + significa, 3 * sigma + significa? – SeF

1

Se si preferisce utilizzare un approccio graduale che si potrebbe prendere in considerazione una soluzione come segue

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() 
Problemi correlati