尝试使用scipy将trig函数拟合到数据 - python

我正在尝试使用scipy.optimize.curve_fit拟合一些数据。我有read the documentation和this StackOverflow post,但似乎都没有回答我的问题。

我有some data,它是简单的2D数据,看起来像是trig函数。我想将其与一般的触发功能配合使用
使用scipy

我的方法如下:

from __future__ import division
import numpy as np
from scipy.optimize import curve_fit



#Load the data
data = np.loadtxt('example_data.txt')
t = data[:,0]
y = data[:,1]


#define the function to fit
def func_cos(t,A,omega,dphi,C):
    # A is the amplitude, omega the frequency, dphi and C the horizontal/vertical shifts
    return A*np.cos(omega*t + dphi) + C

#do a scipy fit
popt, pcov = curve_fit(func_cos, t,y)

#Plot fit data and original data
fig = plt.figure(figsize=(14,10))
ax1 = plt.subplot2grid((1,1), (0,0))

ax1.plot(t,y)
ax1.plot(t,func_cos(t,*popt))

输出:

尝试使用scipy将trig函数拟合到数据 - python

蓝色是数据,橙色是合适的位置。显然我做错了。有指针吗?

参考方案

如果没有提供用于初始猜测参数p0的值,那么将为每个参数假定1的值。从文档:

p0:类似array_,可选
参数的初始猜测(长度N)。如果为None,则初始值将全部为1(如果可以使用自省功能确定函数的参数数量,否则将引发ValueError)。

由于您的数据具有非常大的x值和非常小的y值,因此1的初始猜测与实际解决方案相距甚远,因此优化程序不会收敛。您可以通过提供合适的初始参数值(可以从数据中猜测/近似)来帮助优化器:

  • 幅度:A = (y.max() - y.min()) / 2
  • 偏移量:C = (y.max() + y.min()) / 2
  • 频率:在这里,我们可以通过乘以连续的y值来估计零交叉的数量,并检查哪些乘积小于零。该数字除以总x范围可得出频率,并且为了以pi单位获得它,我们可以将该数字乘以pi:y_shifted = y - offset; oemga = np.pi * np.sum(y_shifted[:-1] * y_shifted[1:] < 0) / (t.max() - t.min())
  • 相移:可以设置为零,dphi = 0
  • 因此,总而言之,可以使用以下初始参数猜测:

    offset = (y.max() + y.min()) / 2
    y_shifted = y - offset
    p0 = (
        (y.max() - y.min()) / 2,
        np.pi * np.sum(y_shifted[:-1] * y_shifted[1:] < 0) / (t.max() - t.min()),
        0,
        offset
    )
    popt, pcov = curve_fit(func_cos, t, y, p0=p0)
    

    这给了我以下拟合函数:

    尝试使用scipy将trig函数拟合到数据 - python

    Python GPU资源利用 - python

    我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

    Python:图像处理可产生皱纹纸效果 - python

    也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

    Python uuid4,如何限制唯一字符的长度 - python

    在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

    Python:无法识别Pip命令 - python

    这是我拍摄的屏幕截图。当我尝试在命令提示符下使用pip时,出现以下错误消息:pip无法识别为内部或外部命令,可操作程序或批处理文件。我已经检查了这个线程:How do I install pip on Windows?我所能找到的就是我必须将"C:\PythonX\Scripts"添加到我的类路径中,其中X代表python版本。如您在我的…

    Python sqlite3数据库已锁定 - python

    我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…