gpt4 book ai didi

Python 函数与部分 - Scipy 不喜欢部分

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:55 25 4
gpt4 key购买 nike

所以我正在阅读curve_fit documentation . curve_fit 将要拟合的函数作为其第一个参数。我稍微修改了示例代码,以便将其部分作为第一个参数:

In:

import numpy as np
from scipy.optimize import curve_fit
def func( t, x , a, b, c): # I added a dummy variable t so that I can apply partials later
return a*np.exp(-b*x) + c + t
func = partial( func, 0 ) # use of partial to remove the dummy variable
x = np.linspace(0,4,50)
y = func(x, 2.5, 1.3, 0.5)
yn = y + 0.2*np.random.normal(size=len(x))
popt, pcov = curve_fit(func, x, yn) # curve_fit gets a partial instead of a Python function

Out:
TypeError: <functools.partial object at 0x104551c58> is not a Python function

啊,真令人失望。我想下次我会使用 lambda。无论如何,这里有什么问题?什么是函数可以做而部分函数不能做的?

最佳答案

curve_fit 使用 getargspec来自标准库 inspect以确定函数的参数。不幸的是,getargspec 不处理部分:

In [31]: from inspect import getargspec

In [32]: from functools import partial

In [33]: def func(t, x, a, b, c):
....: return a*np.exp(-b*x) + c + t
....:

In [34]: pfunc = partial(func, 0)

getargspec(func) 工作正常。

In [35]: getargspec(func)
Out[35]: ArgSpec(args=['t', 'x', 'a', 'b', 'c'], varargs=None, keywords=None, defaults=None)

但是 getargspec 不处理偏函数:

In [36]: getargspec(pfunc)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-36-3fb5eaea7c94> in <module>()
----> 1 getargspec(pfunc)

/Users/warren/anaconda/python.app/Contents/lib/python2.7/inspect.pyc in getargspec(func)
814 func = func.im_func
815 if not isfunction(func):
--> 816 raise TypeError('{!r} is not a Python function'.format(func))
817 args, varargs, varkw = getargs(func.func_code)
818 return ArgSpec(args, varargs, varkw, func.func_defaults)

TypeError: <functools.partial object at 0x107ec6d08> is not a Python function

关于Python 函数与部分 - Scipy 不喜欢部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24513109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com