[SciPy-user] Optimization
Lorenzo Isella
lorenzo.isella@gmail....
Sat Feb 24 11:44:54 CST 2007
Dear All,
I am going through the Scipy manual and I am trying to reproduce, as an
exercise to learn Python and Scipy, some nonlinear least-square
optimization which I was able to carry out using another language.
I am collecting some questions which hopefully will help me understand
Python a bit better:
(1) What is the difference between
from pylab import *
and import pylab?
(2) the 2nd question may be a non-problem: in running some of the
examples in the tutorial by Olinfant, I could not use the xplt module,
no matter whether trying import scipy.xplt, from scipy.xplt import * et
similia.
I bumped into
http://lists.debian.org/debian-science/2007/01/msg00007.html
which may be the answer (I am running Debian on my box as well and I
installed Scipy from the Debian repository). Can I install xplt by itself?
BTW, I also visited
http://www.scipy.org/Cookbook/xplt
but even using
from scipy.sandbox import xplt
does not help.
(3) Is there a way to have arrays starting with index 1 rather than
zero in Python? As you can guess, I do not have a strong C background.
(4) This is the main question: I am trying to fit some experimental data
to a log-normal curve. I would like to follow the same steps as in the
tutorial, but something seems to be going wrong.
I cut and paste the code I am using and attach a .csv file so that one
can reproduce step by step my work.
(5) Finally, if I load scipy and then write, e.g., z=10.3, how is z
handled? Is it a floating point number?
What if, for instance, I need to have a very large number of significant
digits because they do matter for some computation I want to run? Can I
have the equivalent of format long [Matlab statement], so that every
non-integer number is by default treated with a certain precision?
Here is the code:
#! /usr/bin/env python
from pylab import plot, show, ylim, yticks
from scipy import *
import pylab
# now I want to try reading some .csv file
data = pylab.load("120km-TPM.csv",delimiter=',')
vecdim=shape(data) # now I introduce a vector with the dimensions of
data, the file I read
print "the dimensions of data are"
print vecdim # now very careful! in Python the arrays start with index
zero.
diam=data[0:vecdim[0],0] # it means: slice the rows from the 1st one (0)
to the last one (
# (vecdim[0]) for the first column (0)
print "the dimensions of diam are"
print shape(diam)
#plot(diam,data[:,1])
#show() # uncomment them to plot a distribution
# 1st problem: if uncomment the previous two lines, I get a warning and
until I close
# the window, the script does not progress.
# now I try performing a least-square fitting
from scipy.optimize import leastsq
x=diam # just a list of diameters
y_meas=data[0:vecdim[0],1] # measured data, for example the 2nd column
of the .csv file
def residuals(p, y, x):
A1,mu1,myvar1 = p
err =
y-log(10.0)*A1/sqrt(2.0*pi)/log(myvar1)*exp(-((log(x/mu1))**2.0)/2.0/log(myvar1)/log(myvar1))
return err
def peval(x, p):
return
log(10.0)*p[0]/sqrt(2.0*pi)/log(p[2])*exp(-((log(x/p[1]))**2.0)/2.0/log(p[2])/log(p[2]))
p0 = [50000.0,90.0, 1.59]
print array(p0)
# now I try actually solving the problem
print "ok up to here"
plsq = leastsq(residuals, p0, args=(y_meas, x))
print "ok up to here2"
print plsq[0]
print array([A, k, theta])
print "So far so good"
which produces this output on my box:
$ ./read-and-plot.py
the dimensions of data are
(104, 10)
the dimensions of diam are
(104,)
[ 5.00000000e+04 9.00000000e+01 1.59000000e+00]
ok up to here
TypeError: array cannot be safely cast to required type
Traceback (most recent call last):
File "./read-and-plot.py", line 51, in ?
plsq = leastsq(residuals, p0, args=(y_meas, x))
File "/usr/lib/python2.4/site-packages/scipy/optimize/minpack.py",
line 266, in leastsq
retval =
_minpack._lmdif(func,x0,args,full_output,ftol,xtol,gtol,maxfev,epsfcn,factor,diag)
minpack.error: Result from function call is not a proper array of floats.
Many thanks
Lorenzo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 120km-TPM.csv
Type: text/csv
Size: 9696 bytes
Desc: not available
Url : http://projects.scipy.org/pipermail/scipy-user/attachments/20070224/e4ede6c7/attachment-0001.bin
More information about the SciPy-user
mailing list