![](https://secure.gravatar.com/avatar/979f65d31f6a47df4a2762bfdd04a989.jpg?s=120&d=mm&r=g)
On Sun, Oct 19, 2008 at 12:52 PM, Robin <robince@gmail.com> wrote:
On Sun, Oct 19, 2008 at 11:28 AM, Maximilian Fabricius <mxhf@gmx.net> wrote:
Robin,
thank you for the quick reply. Indeed, but this would still involve to swap parameters around between fixed and non-fixed and changing the lambda function manually rather then just switching the fissint on and off with a single variable.
But no doubt, a wrapper can be done.
I couldn't think of a way to squeeze it into a lamdba single statement, but something like this would do:
def fit_function(x, fit, y): p0 = zeros(fit.size) p0[fit] = x p0[~fit] = y
where fit is a boolean array, x is the ones to optimised and y are the fixed values. You have the extra overhead of the p0 array allocation for every iteration of the function - but perhaps that is worth it for the convenience.
Robin _______________________________________________ Scipy-dev mailing list Scipy-dev@scipy.org http://projects.scipy.org/mailman/listinfo/scipy-dev
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! Cheers, Maximilian