我想使用類的__call__
方法作爲Numpy curve_fit函數的輸入,這是因爲我的函數和數據準備過程相當複雜(將分析模型數據擬合到一些測量)。通過定義一個函數,它工作得很好,但我無法使它與類一起工作。使用類的__call__方法作爲Numpy的輸入curve_fit
要重新創建我的問題,你可以運行:
import numpy as np
from scipy.optimize import curve_fit
#WORKS:
#def goal(x,a1,a2,a3,a4,a5):
# y=a1*x**4*np.sin(x)+a2*x**3+a3*x**2+a4*x+a5
# return y
# DOES NOT WORK:
class func():
def __call__(self,x,a1,a2,a3,a4,a5):
y=a1*x**4*np.sin(x)+a2*x**3+a3*x**2+a4*x+a5
return y
goal=func()
#data prepraration ***********
xdata=np.linspace(0,50,100)
ydata=goal(xdata,-2.1,-3.5,6.6,-1,2)
# ****************************
popt, pcov = curve_fit(goal, xdata, ydata)
print 'optimial parameters',popt
print 'The estimated covariance of optimial parameters',pcov
我得到的錯誤是:
Traceback (most recent call last):
File "D:\...some path...\test_minimizacija.py", line 35, in <module>
popt, pcov = curve_fit(goal, xdata, ydata)
File "C:\Python26\lib\site-packages\scipy\optimize\minpack.py", line 412, in curve_fit
args, varargs, varkw, defaults = inspect.getargspec(f)
File "C:\Python26\lib\inspect.py", line 803, in getargspec
raise TypeError('arg is not a Python function')
TypeError: arg is not a Python function
我怎樣才能使這項工作?
在我看來,這是一個非常好的StackOverflow問題的例子。這個問題清楚地概述,用最少的代碼來證明,可以重現問題。追溯被包括在內。做得很好。我希望更多的人喜歡這個。 – mgilson