from pylab import *
sigma = 4
mu = 3
N=1000
x = np.random.randn(N)*sigma + mu
H = hist(x, bins=N/30)
from scipy.stats import distributions
xx = np.linspace(-20,20)
yy = np.linspace(1, 10)
XX, YY = np.meshgrid(xx,yy)
@np.vectorize
def loglik(mu, sigma):
return sum(distributions.norm.logpdf(x, mu, sigma))
contour(xx, yy, loglik(XX,YY), 200)
<matplotlib.contour.QuadContourSet instance at 0x821b320>
import scipy.optimize
scipy.optimize.minimize(lambda x: -loglik(*x), [2,2])
status: 2 success: False njev: 40 nfev: 170 hess_inv: array([[ 0.00058145, 0.00029072], [ 0.00029072, 0.00014537]]) fun: 2820.1133778517615 x: array([ 3.08676892, 4.05996758]) message: 'Desired error not necessarily achieved due to precision loss.' jac: array([ 6.10351562e-05, 6.10351562e-05])
np.mean(x)
np.std(x)