On Thu, Feb 12, 2009 at 11:21 AM, Ralph Kube <ralphk...@googlemail.com>wrote:
> Hi there, > I have a little problem here with array indexing, hope you see the problem. > I use the following loop to calculate some integrals > > import numpy as N > from scipy.integrate import quad > T = 1 > dt = 0.005 > L = 3 > n = 2 > ints = N.zeros([T/dt]) > > for t in N.arange(0, T, dt): > a = quad(lambda > x:-1*(1-4*(t**4))*N.exp(-t**4)*N.exp(-x**2)*N.cos(n*N.pi*(x-L)/(2*L)), > -L, L)[0] > ints[int(t/dt)] = a > print t, N.int32(t/dt), t/dt, a, ints[int(t/dt)] > > The output from the print statement looks like: > > 0.14 28 28.0 2.52124867251e-16 2.52124867251e-16 > 0.145 28 29.0 2.03015199575e-16 2.03015199575e-16 > 0.15 30 30.0 2.40857836418e-16 2.40857836418e-16 > 0.155 31 31.0 2.52191011339e-16 2.52191011339e-16 > > The same happens on the ipython prompt: > > 0.145 * 0.005 = 28.999999999999996 > N.int32(0.145 * 0.005) = 28 > > Any ideas how to deal with this? > I'm assuming you mean 0.145 / 0.005 = 28.999999999999996 When you cast to an integer, it *truncates* the fractional part, and life with floating point says that what should be an exact result won't necessarily be exact. Try using N.around. Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion