我有一个众所周知的问题,但目前无法修复。这是关于curve_fit
函数。我得到的错误:
在minpack.pycurve_fit中,第765行出现错误scipy/optimize/ www.example.com“(sigma
的形状不正确)。
下面是代码,不要对循环进行警告,它只是我想5个不同的直方图:
for i in range(5):
mean_o[i] = np.mean(y3[:,i])
sigma_o[i] = np.std(y3[:,i])
## Histograms
# Number of bins
Nbins=100
binwidth = np.zeros(5)
# Fitting curves
def gaussian(x, a, mean, sigma):
return a * np.exp(-((x - mean)**2 / (2 * sigma**2)))
for i in range(5):
binwidth[i] = (max(y3[:,i]) - min(y3[:,i]))/Nbins
bins_plot = np.arange(min(y3[:,i]), max(y3[:,i]) + binwidth[i], binwidth[i])
plt.title('Distribution of O observable for redshift bin = '+str(z_ph_fid[i]))
plt.hist(y3[:,i], bins=bins_plot, label='bin '+str(z_ph_fid[i]))
plt.legend(loc='upper right')
# Fitting and plot
range_fit = np.linspace(min(y3[:,i]), max(y3[:,i]), len(y3[:,i]))
popt, pcov = curve_fit(gaussian, range_fit, y3[:,i], mean_o[i], sigma_o[i])
plt.plot(range_fit, gaussian(range_fit, *popt))
# Save figure
plt.savefig('chi2_gaussian_bin_'+str(i+1)+'.png')
plt.close()
第一个直方图i=0
看起来像:
我想在直方图上绘制一个红色的高斯拟合。
1条答案
按热度按时间0s0u357o1#
OP有两个问题。
第一个问题是代码试图用正态分布来拟合随机样本。这是错误的。但是,可以拟合直方图的输出。如下面的代码所示。最好使用
scipy.stats.norm.fit()
,它允许拟合随机样本。这也显示了。第二个问题是sigma-shape。这里
curve_fit
实际上预期y数据上的误差,这自然需要y数据的形状。应该做的是:提供拟合的起始值。这也如下所示。代码如下所示: