我正在尝试将数据拟合到高斯分布,我不断收到此错误: return -sum(log(gaussian.pdf((z-a)/ b)/ b))
ValueError:操作数无法与形状(0,)(14,2)
一起广播我不知道自己错过了什么。有任何想法吗?非常感谢你的帮助! 这是迄今为止的代码:
from pylab import *
import csv
import matplotlib.pyplot as plt
from scipy.stats import norm as gaussian
from scipy.optimize import fmin
def main():
fname='HW4Q4data.csv'
data = loadtxt(fname, delimiter=',')
x = data[:,0]
y = data[:,1]
m =data.shape[0]
z = []
n = len(z)
for i in range(n):
z += [x[i]]*y[i]
z = array(z)
def fit_likelihood(a,b):
return -sum(log(gaussian.pdf((z-a)/b)/b))
objective = fit_likelihood(a,b)
result = fmin(objective, [67.,5.])
mu, sigma = result[0], result[1]
print ("Numerical Parameter fits: ", (mu, sigma))
print ("\tAverage Log-Likelihood: ", fit_likelihood(result,b)/n)
# fast, exact method
mu = sum(z)/float(n)
sigma = sqrt(sum((z-mu)**2)/n)
print ("Exact Parameter fits: ", (mu,sigma))
print ("\tAverage Log-Likelihood: ", fit_likelihood((mu,sigma))/n)
print ("\tn = : ", fit_likelihood((mu,sigma))/n)
u = linspace(min(z)*.95,max(z)*1.05, 256)
figure(1, figsize=(8,16))
subplot(3,1,1)
plt.plot(u, n*gaussian.pdf((u-mu)/sigma)/sigma, 'b-')
width = .3
bar_ob = bar(x-width*.5, y, width, color='k')
xlim(min(u), max(u))
ylabel('Count', fontsize=18)
title('Best Fit Gaussian: $\mu = %f$, $\sigma = %f$'%(mu,sigma), fontsize=18)
show()
main()的