Data una media e una varianza esiste una semplice chiamata di funzione pylab che traccerà una distribuzione normale?python pylab trama distribuzione normale
Oppure ho bisogno di crearne uno da solo?
Data una media e una varianza esiste una semplice chiamata di funzione pylab che traccerà una distribuzione normale?python pylab trama distribuzione normale
Oppure ho bisogno di crearne uno da solo?
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()
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:
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
@Avaris: è fantastico, grazie per il suggerimento. Modificato la mia risposta. – lum
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. –
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)
Vuoi dire -3 * sigma + significa, 3 * sigma + significa? – SeF
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()
Grazie per la correzione, @platinor. – unutbu
i tuoi parametri linspace sono davvero strani! Meglio fare '' 'x = np.linspace (mu - 4 * sigma, mu + 4 * sigma, 100)' '' – Amen
@Amen: Sì, grazie per la correzione. – unutbu