首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两种不同函数的拟合

两种不同函数的拟合
EN

Stack Overflow用户
提问于 2018-04-24 08:57:51
回答 1查看 263关注 0票数 3

关于Python中的一个简单的fit函数,我有一个问题。我试图在一个数据集上安装两个不同的函数,这两个系统之间的边界也应该是一个合适的参数。我很天真地试着做这样的事:

代码语言:javascript
复制
def FitFunc(x, a, b, c, d, e, border):
    if x < border:
        return a * x + b
    if x > border:
        return c * x**2 + d * x + e

但我得到了一个ValueError:

系列的真值是模糊的。使用a.empty()、a.bool()、a.item()、a.any()或a.all()

我知道您不能将我的x数组与整数值进行比较(这个值甚至没有分配给固定值,这应该由curve_fit过程来完成)。

我无法找到解决这个所谓简单问题的办法。有人能帮我解决这件事吗?

提前感谢!

编辑:我构造了一个示例:

对于带有x<5的数据,这是用线性函数(y=x-3)完美描述的,对于x>5,这是用平方函数(y=x**2/5-3*x/5)完美描述的。假设你不知道x是完美的‘边框’,有没有办法让curve_fit知道呢?

EN

回答 1

Stack Overflow用户

发布于 2018-04-24 11:56:56

错误消息是,将数组(x)的值与标量值(border)进行比较是不明确的。您的意思是x的值是否小于border,或者如果x的所有值都小于border

我怀疑您真正想要的是numpy的where函数,它有点像遍历x并决定逐点使用哪个表达式,但速度要快得多:

代码语言:javascript
复制
def FitFunc(x, a, b, c, d, e, border):
    out = a * x + b
    out[np.where(x > border)] = c * x**2 + d * x + e
    return out

我认为这就是您想要的,并且应该能够基于border选择合适的函数形式。

然而,我要提醒的是,它可能不会做你想做的事。也就是说,看起来您希望border是一个合适的变量。

optimize例程中的拟合变量(以及大多数“曲线拟合”上下文)需要是连续的浮点变量。您的border变量将用作x索引的离散整数值,以更改函数形式。拟合算法将首先选择一个值(假设为5.0),然后对该值进行非常小的更改(例如,5.0000002)。这不会改变两个函数形式之间的断点所在,fit将决定border不更改fit。我真希望我有办法绕过这件事。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49997412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档