[SciPy-dev] parameter control in scipy.optimize.leastsq
Robin
robince@gmail....
Sun Oct 19 10:40:17 CDT 2008
On Sun, Oct 19, 2008 at 4:28 PM, Maximilian Fabricius <mxhf@gmx.net> wrote:
> Robin,
>
> great, nice idea! As this may be of use to others, my solution now is:
>
>
> def fit_function(p_fit, fit, p_fixed, ... ):
> # assemble p_fit and p_fixed into a single array
> # while restoring the correct order of the original p0 array.
> p = zeros(fit.size)
> p[ where(fit == True) ] = p_fit
> p[ where(fit == False) ] = p_fixed
> # calls the original residuals routine
> return residuals(p, ... )
>
> main():
> # best guesses
> p0 = zeros(10)
> p0[0] = vrot_d
> p0[1] = vsig_d
> ....
>
> # choose which parameters to fit
> fit = zeros(len(p0))
> fit[0:7] = True
> fit[8] = False
> fit[9] = False
>
> # store parameters which should be fit in p_fit
> # all the others in p_fixed
> p_fit = p0[ where(fit == True) ]
> p_fixed = p0[ where(fit == False) ]
> plsq = leastsq(fit_function, p_fit, args=(fit, p_fixed, ...) )
>
> Thanks!
Just want to point out that if fit is a boolean array (ie fit =
array([True,False,False,True]) etc. then you can index with it
directly p0[fit] instead of p0[where(fit==True)] and p0[~fit] instead
of p0[where(fit==False)] which is likely to be a bit quicker. Doesn't
matter outside, but in the fit_function you probably want to save any
time you can since it will be run many times.
Robin
More information about the Scipy-dev
mailing list