我正在努力
使用 fmin 进行数据拟合
http://glowingpython.blogspot.ca/2011/05/curve-fitting-using-fmin.html
其中包含以下使用fmin
的代码:
# fitting the data with fmin
p0 = rand(3) # initial parameter value
p = fmin(e, p0, args=(x,y))
但是,当我尝试时,它给了我以下错误:
TypeErrorTraceback (most recent call last)
<ipython-input-1-41b53befd463> in <module>()
22 # fitting the data with fmin
23 p0 = rand(3) # initial parameter value
---> 24 p = fmin(e, p0, args=(x,y))
25
26 print 'estimater parameters: ', p
TypeError: 'args' is an invalid keyword to ufunc 'fmin'
当我查看文档 here 时,我确实看到 args
是一个有效的关键字。
更新:
我在Python2.7中按原样运行脚本,并得到了上述错误。 看到 Warren Weckesser 的回答后,这里是更新的脚本:
from pylab import *
import numpy as np
from numpy.random import normal
from scipy.optimize import fmin
%pylab inline
# parametric function, x is the independent variable
# and c are the parameters.
# it's a polynomial of degree 2
fp = lambda c, x: c[0]+c[1]*x+c[2]*x*x
real_p = rand(3)
# error function to minimize
e = lambda p, x, y: (abs((fp(p,x)-y))).sum()
# generating data with noise
n = 30
x = linspace(0,1,n)
y = fp(real_p,x) + normal(0,0.05,n)
# fitting the data with fmin
p0 = rand(3) # initial parameter value
p = fmin(e, p0, args=(x,y))
print 'estimater parameters: ', p
print 'real parameters: ', real_p
xx = linspace(0,1,n*3)
plot(x,y,'bo', xx,fp(real_p,xx),'g', xx, fp(p,xx),'r')
show()
我仍然收到与上面完全相同的错误。
如何解决?谢谢。
最佳答案
如果您提供minimal, complete and verifiable example,我们会更容易为您提供帮助。重现了这个问题。如果没有这个,我们就必须猜测。
在这种情况下,我的猜测是您实际上正在使用 numpy.fmin
,不是scipy.optimize.fmin
。添加行
from scipy.optimize import fmin
位于脚本的顶部。如果你正在做类似的事情
from numpy import *
(如 glowingpython
中的代码所示),然后删除该行,然后使用
import numpy as np
并将 np.
前缀与您使用的所有 numpy 名称一起使用,或者仅从您实际使用的 numpy 中显式导入那些名称,例如
from numpy import array, linspace # whatever you actually use
from numpy.random import rand # etc.
在脚本中使用 *
形式的 import
是一种不好的做法,这正是您提出这个问题的原因。
但是,当您在 ipython 或 jupyter 笔记本中交互工作时,像 from pylab import *
这样的东西确实非常方便。为了避免 fmin
被 numpy 中的 fmin
遮蔽的问题,您可以这样做:
from scipy import optimize
然后使用fmin
调用
p = optimize.fmin(e, p0, args=(x, y))
关于python - 在 jupyter 笔记本下使用 scipy.optimize 中的 fmin 进行数据拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44530214/