我try 使用Scipy的curve_fit()函数将一个高斯函数与我的数据集进行拟合,但未能使该函数与之匹配.我使用其他一些工具,如MatLab,try 了同样的方法,该函数非常适合.有没有人能帮帮我?我不确定我做错了什么.非常感谢您的帮助:)

import numpy as np 
from scipy.optimize import curve_fit  
import matplotlib.pyplot as plt 

x_data = [12, 34, 56]
y_data = [1e-10, 1e-3, 1e-10]

def func(xdata, a, b, c): 
    return a*np.exp(-(xdata - b)**2/(2*c**2))

popt,_ = curve_fit(func, x_data, y_data)

x_fit = np.linspace(0,100, 100)
y_fit = func(x_fit, *popt)

plt.scatter(x_data, y_data)
plt.plot(x_fit,y_fit)
plt.show()

上面是我试过的代码,我得到了一条钟形曲线,它拒绝从平均值0(钟形部分超过x=0)移动.

推荐答案

只要你给它合理的初始条件,它就可以很好地适应:

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

x_data = [12, 34, 56]
y_data = [1e-10, 1e-3, 1e-10]


def func(xdata: np.ndarray, a: float, b: float, c: float) -> np.ndarray:
    return a*np.exp(-(xdata - b)**2/(2*c**2))


popt, _ = curve_fit(f=func, xdata=x_data, ydata=y_data, p0=[1e-3, 34, 10])
print(popt)

x_fit = np.linspace(0, 100, 100)
y_fit = func(x_fit, *popt)

plt.scatter(x_data, y_data)
plt.plot(x_fit,y_fit)
plt.show()
[1.00000000e-03 3.40000000e+01 3.87481363e+00]

fit

Python-3.x相关问答推荐

错误2没有这样的文件或目录website_content.txt""

pandas查找另一列中是否存在ID

如何在matplotlib中显示次要刻度标签

如何将参数/值从测试方法传递给pytest的fixture函数?

PANDAS中当前数据帧的匹配与更新

Heroku 中的未知错误代码缺少一个或多个参数

使用 NaN 计算 pct_change 时如何避免 bfill 或 ffill

将逗号分隔的字符串类型系列转换为整数列表 pandas

根据另一个数据帧中的位置从主数据帧中提取子序列

有效地缩短列表,直到第一次和最后一次出现不同于 None 的值

删除括号和大括号中不必要的空格

pymongo 失败并出现错误未定义

Python3 AttributeError:列表对象没有属性清除

Python - 如何从同一台客户端机器运行多个Flask应用程序

如何从字典中打印特定键值?

如何使用pandas python获取数据框中每列的最大长度

python total_ordering:为什么使用 __lt__ 和 __eq__ 而不是 __le__?

如何从同一文件夹中的模块导入功能?

如何在元素列表中找到最大的数字,可能是非唯一的?

将 args、kwargs 传递给 run_in_executor