[SciPy-user] linear (polynomial) fit with error bars
Robert Kern
robert.kern at gmail.com
Thu Apr 10 16:08:49 EDT 2008
On Thu, Apr 10, 2008 at 7:09 AM, massimo sandal <massimo.sandal at unibo.it> wrote:
> massimo at calliope:~/Python/linfit$ python linfit.py
> Traceback (most recent call last):
> File "linfit.py", line 31, in <module>
> w, success = optimize.leastsq(errfunc, [0,0], args=(xval,yval),
> diag=weigths)
> File "/usr/lib/python2.5/site-packages/scipy/optimize/minpack.py",
> line 262, in leastsq
> m = check_func(func,x0,args,n)[0]
> File "/usr/lib/python2.5/site-packages/scipy/optimize/minpack.py",
> line 12, in check_func
> res = atleast_1d(apply(thefunc,args))
> File "linfit.py", line 4, in errfunc
> return Y-(a[0]*X+a[1])
> ValueError: shape mismatch: objects cannot be broadcast to a single shape
>
> which baffles me. What should I look for to understand what I am doing
> wrong?
Print out the various individual parts of that expression to make sure
they are compatible (or use a debugger to do the same interactively).
E.g.
print Y
print X
print a
In this case, the problem is that you are passing in X and Y as lists
instead of arrays. Since a[0] is a numpy scalar type that inherits
from the builtin int type, a[0]*X uses the list type's multiplication
which leaves you with an empty list.
Instead of constructing xval and yval as lists, use numpy.empty().
xval=numpy.empty([numofdatapoints])
yval=numpy.empty([numofdatapoints])
err=numpy.empty([numofdatapoints])
Also, you don't need to "declare" the variables "w" and "success".
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the SciPy-User
mailing list