I filed a similar bug report the other day. I believe that it has to do with the default size of the accumulator variable in the algorithms being used. Please see the following example,
Python 2.4.3 (#2, Dec 7 2006, 11:01:45) [GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as n >>> a = n.array([132.00004,132.00006,132.00005],dtype=n.float32) >>> a.mean() 132.00006103515625 >>> a = n.array([132.00004,132.00006,132.00005],dtype=n.float64) >>> a.mean() 132.00004999999999 >>> In the first case, the calculation is done in single precision since that is the type of the input arrays. The second case the calculation is double precision. I think this is the effect that is being seen. The workaround would be to say numpy.average(obj,dtype=numpy.float64). Chris Stefan van der Walt wrote: > On Tue, Jan 23, 2007 at 08:29:47PM -0500, Daniel Smith wrote: > >> When calling the average() or mean() functions on a small array (3 >> numbers), I am seeing significant numerical errors (on the order of 1% >> with data to 8 significant digits). The code I am using is essentially: >> >> A = zeros(3) >> A[i] = X >> B = average(A) >> > > I'm not sure I understand: > > In [7]: A = N.zeros(3) > > In [8]: A[1] = 3. > > In [9]: N.average(A) > Out[9]: 1.0 > > In [11]: A[0] = 2. > > In [12]: N.average(A) > Out[12]: 1.66666666667 > > In [13]: (2+3+0)/3. > Out[13]: 1.6666666666666667 > > In [14]: for i in range(1000): > ....: A = N.random.rand(3) > ....: assert N.average(A) == N.sum(A)/3. > > Maybe you can give a specific code snippet? > > Cheers > Stéfan > _______________________________________________ > Numpy-discussion mailing list > Numpy-discussion@scipy.org > http://projects.scipy.org/mailman/listinfo/numpy-discussion > _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion