Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的优化块(scipy)-带有直方图的直方图_Python_Scipy_Approximation - Fatal编程技术网

python中的优化块(scipy)-带有直方图的直方图

python中的优化块(scipy)-带有直方图的直方图,python,scipy,approximation,Python,Scipy,Approximation,我需要通过一个模拟直方图来拟合一个实验直方图(以确定模拟直方图的几个参数,使其最适合)。我尝试了scipy.optimize中的curve_fit,但在这种情况下不起作用:返回一个错误“…不是python函数”。是否可以在scipy或其他python模块中自动执行此操作?如果没有,请您提供一些可能算法的链接,以便自己进行调整 根据您所说的,我认为以下几点应该有所帮助,您似乎试图以错误的方式使用曲线拟合: 您需要定义您试图适应的分布。例如,如果我有一些看起来像的数据,我想知道数据的拟合程度,以及哪

我需要通过一个模拟直方图来拟合一个实验直方图(以确定模拟直方图的几个参数,使其最适合)。我尝试了scipy.optimize中的curve_fit,但在这种情况下不起作用:返回一个错误“…不是python函数”。是否可以在scipy或其他python模块中自动执行此操作?如果没有,请您提供一些可能算法的链接,以便自己进行调整

根据您所说的,我认为以下几点应该有所帮助,您似乎试图以错误的方式使用曲线拟合:

您需要定义您试图适应的分布。例如,如果我有一些看起来像的数据,我想知道数据的拟合程度,以及哪些参数提供了最佳拟合,我将执行以下操作:

import numpy as np
import pylab as plt
from scipy.optimize import curve_fit

# Create fake data and run it though `histogram` to get the experimental distribution
experimental = np.random.normal(10.0, 0.4, size=10000)
n, bins = plt.histogram(experimental, bins=100, normed=True)

# This just gives the mid points of the bins, many different (and better) ways exist to
# do this I'm sure
bins_mid_points = (0.5*(bins + np.roll(bins, 1)))[1:]

# Define the normal distribution as a function
def normal(x, sigma, mu):
    return np.exp(-(x - mu)**2 / (2 * sigma**2)) / (sigma * np.sqrt(2*np.pi))

# Fit the experimental data, 
popt, pcov = curve_fit(normal, xdata=bins_mid_points, ydata=n)

# Plot both 
plt.bar(bins[:-1], n, width=np.diff(bins))
plt.plot(bins_mid_points, normal(bins_mid_points, *popt), color="r", lw=3)

红线显示我们的模拟拟合,如果需要,您也可以将其绘制为直方图。
popt
的输出给出了一个最适合数据的
[sigma,mu]
数组,而
pcov
可用于确定拟合程度

请注意,我将直方图中的数据标准化,这是因为我定义的函数是正态分布

您需要仔细考虑您期望的分布以及您希望从中获得的统计数据

请向我们展示(浓缩版)您的代码以及完整的错误消息。