如何在Python中拟合阶跃函数

2024-05-27

我有一个关于使用 curve_fit 等 scipy 例程拟合阶跃函数的问题。我很难将其矢量化,例如:

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

xobs=np.linspace(0,10,100)
yl=np.random.rand(50); yr=np.random.rand(50)+100
yobs=np.concatenate((yl,yr),axis=0)

def model(x,rf,T1,T2):
#1:   x=np.vectorize(x)
    if x<rf:
        ret= T1
    else:
        ret= T2
    return ret
#2: model=np.vectorize(model)
popt, pcov = curve_fit(model, xobs, yobs, [40.,0.,100.])

It says

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如果我添加 #1 或 #2 它会运行但并不真正适合数据:

OptimizeWarning: Covariance of the parameters could not be estimated     category=OptimizeWarning)
[ 40.          50.51182064  50.51182064] [[ inf  inf  inf]
[ inf  inf  inf]
[ inf  inf  inf]]

有人知道如何解决这个问题吗?谢谢


这就是我所做的。我保留了xobs and yobs:

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

xobs=np.linspace(0,10,100)
yl=np.random.rand(50); yr=np.random.rand(50)+100
yobs=np.concatenate((yl,yr),axis=0)

现在,必须生成 Heaviside 函数。为了让您对该函数有一个概述,请考虑 Heaviside 函数的半极大约定:

在 Python 中,这相当于:def f(x): return 0.5 * (np.sign(x) + 1)

示例图如下:

xval = sorted(np.concatenate([np.linspace(-5,5,100),[0]])) # includes x = 0
yval = f(xval)
plt.plot(xval,yval,'ko-')
plt.ylim(-0.1,1.1)
plt.xlabel('x',size=18)
plt.ylabel('H(x)',size=20)

现在,正在策划xobs and yobs gives:

plt.plot(xobs,yobs,'ko-')
plt.ylim(-10,110)
plt.xlabel('xobs',size=18)
plt.ylabel('yobs',size=20)

请注意,比较这两个图,第二个图移动了 5 个单位,最大值从 1.0 增加到 100。我推断第二个图的函数可以表示如下:

或者在Python中:(0.5 * (np.sign(x-5) + 1) * 100 = 50 * (np.sign(x-5) + 1)

合并这些图可以得出(其中Fit代表上面的拟合函数)

剧情证实了我的猜测是正确的。现在,假设您不知道这个正确的拟合函数是如何产生的,则创建一个广义拟合函数:def f(x,a,b,c): return a * (np.sign(x-b) + c),理论上,a = 50, b = 5, and c = 1.

继续估算:

popt,pcov=curve_fit(f,xobs,yobs,bounds=([49,4.75,0],[50,5,2])).

Now, bounds = ([lower bound of each parameter (a,b,c)],[upper bound of each parameter])。从技术上讲,这意味着 49 abc < 2.

Here are MY results for popt and pcov: Results

pcov表示 popt 的估计协方差。对角线提供参数估计的方差[Source] https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.curve_fit.html.

结果表明参数估计pcov接近理论值。

基本上,广义赫维赛德函数可以表示为:a * (np.sign(x-b) + c)

以下是将生成参数估计值和相应协方差的代码:

import numpy as np
from scipy.optimize import curve_fit

xobs = np.linspace(0,10,100)
yl = np.random.rand(50); yr=np.random.rand(50)+100
yobs = np.concatenate((yl,yr),axis=0)

def f(x,a,b,c): return a * (np.sign(x-b) + c) # Heaviside fitting function

popt, pcov = curve_fit(f,xobs,yobs,bounds=([49,4.75,0],[50,5,2]))
print 'popt = %s' % popt
print 'pcov = \n %s' % pcov

最后,请注意,估计popt and pcov vary.

python /questions/tagged/pythonscipy /questions/tagged/scipy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中拟合阶跃函数 的相关文章

随机推荐

  • 根据 WooCommerce 中的订单数量设置折扣

    在WooCommerce中 如何根据订单数量设置折扣 例如 我想根据客户订单应用折扣 首单折扣 50 美元 第二次订购折扣 30 美元 第三次订购折扣10美元 我搜索过互联网但没有找到任何可用的解决方案或插件 Thanks 这是一个挂钩的自
  • 在Tomcat中设置环境变量TESSDATA_PREFIX

    我们正在使用名为 Tess4J 的 Tesseract OCR Java 库 如果作为独立应用程序运行 它可以正常工作 它需要一个名为 TESSDATA PREFIX 的变量 其中包含 tessdata 配置和其他字符集相关文件 它也可以与
  • 如何调试requireJS模块定义的路径/文件

    我是 RequireJS 世界的新手 我越来越Load Timeout error对于我已经在主文件中定义的模块之一 我在 Chrome 的 网络 选项卡中没有看到任何请求 可能是因为 require 之前已经加载了该文件 我已经迷上了on
  • TPL Dataflow如何删除块之间的链接

    我想知道 如何删除块之间的链接 换句话说 我想要与 LinkTo 相反 我想写一个基于 tlp 数据流的记录器 我编写了这个接口 并希望在需要时删除 ILogListener 的订阅 public interface ILogManager
  • 如何通过 mat-dialog-close 或其他方式对 MatDialog 是否关闭进行单元测试

    我有一个简单的组件 它将显示为对话框窗口垫对话框 https material angular io components dialog overview 在该组件的模板中 一个按钮标记为垫子对话框关闭 https material ang
  • 敏捷开发;在线免费工具! [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们一直在寻求在地理上分散的开发团队中实施敏捷方法 因此我需要有关您使用过并认为有用的任何免费在线应用程序的建议 现在我们使用纸卡和墙来管
  • 当您使用 .html() 删除元素时,jQuery 中的事件侦听器是否会自动删除?

    在 jQuery 中如果我们使用 remove 如果要删除某些元素 则与该元素关联的所有绑定事件和 jQuery 数据都将被删除 但是如果我们用以下命令 删除 元素会发生什么 html 我们是否需要在更改任何 html 之前取消绑定所有元素
  • 运行使用 XCode 7 部署的应用程序会崩溃

    我在 xcode 6 中开发应用程序 然后设备连接 我通过调试运行应用程序 在我可以断开设备与 Xcode 的连接并再次运行应用程序后 它正在运行 但今天开始出现一些问题 我使用 xcode 7 中的运行按钮运行应用程序 gt 应用程序正常
  • 用 unicode 字符删除纯文本?

    是否可以删除代码注释中不需要的修改过的单词 由于开发人员仍然在黑暗时代更简单的纯文本时代进行编码 其中文本无法使用隐藏标识符进行格式化 因此实现这一目标的唯一方法是使用 Unicode 字符 由于某些unicode字符可以扩展 y o n
  • Xcode 8 提交时“应用程序签名中缺少 aps 环境权利”

    我有一个应用程序 我们在过去 6 个月内提交了数十个版本 并且我们确实使用 APNS 升级到 Xcode 8 后 我收到了来自 Apple 的以下电子邮件 亲爱的开发者 我们发现您最近的交货存在一个或多个问题 应用程序名称 您的交货是 成功
  • 带有可选第一个哈希参数和keyword_args的奇怪方法行为

    我有以下方法 def test first param nil keyword arg nil puts first param first param puts keyword arg keyword arg end 以下所有调用都按照我
  • go json marshal 的默认大小写选项?

    我有以下结构要导出为 json type ExportedIncident struct Title string json title Host string json host Status string json status Dat
  • 如何将自定义表情符号(小图片)插入到React Native的Textinput中?

    我正在构建一个 BBS 应用程序 用户可以在发布或回复文章时将自定义表情符号 使用我创建的自定义键盘 插入到 Textinput 中 例如 我有一张笑脸图片 它将映射到类似 custom smile code 的代码 当用户在Textinp
  • Spark-shell 使用不同版本的 Scala。使用 homebrew 安装 scala 和 apache-spark

    我使用 homebrew 安装了 scala 和 apache spark 它安装了 scala 2 12 4 和 apache spark 2 2 0 但是 如果您结帐spark shell version它使用不同的 scala 版本
  • 如何在HTTP post中向PHP服务器发送多个参数

    我正在将 base64 字符串发送到 php 服务器 并且运行良好 现在我想以字符串形式发送另一个参数 谁能告诉我下面的代码中需要添加什么代码 下面的代码适用于单个参数 我们如何修改它的多个参数 NSData data UIImageJPE
  • Visual Studio 2010 (C++):暂时抑制 C4706 警告

    当您在 Visual Studio 2010 中编译以下 C 源文件并启用警告级别 W4 时 include
  • 没有 ssl 的 Web 加密 API

    我编写了一个用于安全消息传输的小网络应用程序 以了解有关加密的更多信息 并想向我的朋友展示它并让他们玩一下 所以我将它托管在我的小服务器上 并惊讶地发现 Web Crypto API 我竭尽全力开始工作 因为它的错误消息不是很具体 需要 S
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • 文件夹对象的文件大小信息

    对于Folder对象 它列出了该文件夹 item collection 下的文件 以及文件名和文件ID 包含文件大小会很有帮助 因为目前需要查询每个文件才能获取大小 Thanks 感谢您的反馈 我们收到了很多过滤 GET folders 调
  • 如何在Python中拟合阶跃函数

    我有一个关于使用 curve fit 等 scipy 例程拟合阶跃函数的问题 我很难将其矢量化 例如 import numpy as np from scipy optimize import curve fit import matplo