Re: [Numpy-discussion] bug in numpy.mean() ?

I found something similar, with a very simple example. On 64-bit linux, python 2.7.2, numpy development version: In [22]: a = 4000*np.ones((1024,1024),dtype=np.float32) In [23]: a.mean() Out[23]: 4034.16357421875 In [24]: np.version.full_version Out[24]: '2.0.0.dev-55472ca' But, a Windows XP machine running python 2.7.2 with numpy 1.6.1 gives:
a = np.ones((1024,1024),dtype=np.float32) a.mean() 4000.0 np.version.full_version '1.6.1'
On Tue, 2012-01-24 at 17:12 -0600, eat wrote:
Hi,
Oddly, but numpy 1.6 seems to behave more consistent manner:
In []: sys.version Out[]: '2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]' In []: np.version.version Out[]: '1.6.0'
In []: d= np.load('data.npy') In []: d.dtype Out[]: dtype('float32')
In []: d.mean() Out[]: 3045.7471999999998 In []: d.mean(dtype= np.float32) Out[]: 3045.7471999999998 In []: d.mean(dtype= np.float64) Out[]: 3045.747251076416 In []: (d- d.min()).mean()+ d.min() Out[]: 3045.7472508750002 In []: d.mean(axis= 0).mean() Out[]: 3045.7472499999999 In []: d.mean(axis= 1).mean() Out[]: 3045.7472499999999
Or does the results of calculations depend more on the platform?
My 2 cents, eat
-- -------------------------------------------------- Kathleen M. Tacina NASA Glenn Research Center MS 5-10 21000 Brookpark Road Cleveland, OH 44135 Telephone: (216) 433-6660 Fax: (216) 433-5802 --------------------------------------------------

Hi On Wed, Jan 25, 2012 at 1:21 AM, Kathleen M Tacina < Kathleen.M.Tacina@nasa.gov> wrote:
** I found something similar, with a very simple example.
On 64-bit linux, python 2.7.2, numpy development version:
In [22]: a = 4000*np.ones((1024,1024),dtype=np.float32)
In [23]: a.mean() Out[23]: 4034.16357421875
In [24]: np.version.full_version Out[24]: '2.0.0.dev-55472ca'
But, a Windows XP machine running python 2.7.2 with numpy 1.6.1 gives:
a = np.ones((1024,1024),dtype=np.float32) a.mean() 4000.0 np.version.full_version '1.6.1'
This indeed looks very nasty, regardless of whether it is a version or platform related problem. -eat
On Tue, 2012-01-24 at 17:12 -0600, eat wrote:
Hi,
Oddly, but numpy 1.6 seems to behave more consistent manner:
In []: sys.version
Out[]: '2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'
In []: np.version.version
Out[]: '1.6.0'
In []: d= np.load('data.npy')
In []: d.dtype
Out[]: dtype('float32')
In []: d.mean()
Out[]: 3045.7471999999998
In []: d.mean(dtype= np.float32)
Out[]: 3045.7471999999998
In []: d.mean(dtype= np.float64)
Out[]: 3045.747251076416
In []: (d- d.min()).mean()+ d.min()
Out[]: 3045.7472508750002
In []: d.mean(axis= 0).mean()
Out[]: 3045.7472499999999
In []: d.mean(axis= 1).mean()
Out[]: 3045.7472499999999
Or does the results of calculations depend more on the platform?
My 2 cents,
eat
-- -------------------------------------------------- Kathleen M. Tacina NASA Glenn Research Center MS 5-10 21000 Brookpark Road Cleveland, OH 44135 Telephone: (216) 433-6660 Fax: (216) 433-5802 --------------------------------------------------
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion

On Tue, Jan 24, 2012 at 7:21 PM, eat <e.antero.tammi@gmail.com> wrote:
Hi
On Wed, Jan 25, 2012 at 1:21 AM, Kathleen M Tacina < Kathleen.M.Tacina@nasa.gov> wrote:
** I found something similar, with a very simple example.
On 64-bit linux, python 2.7.2, numpy development version:
In [22]: a = 4000*np.ones((1024,1024),dtype=np.float32)
In [23]: a.mean() Out[23]: 4034.16357421875
In [24]: np.version.full_version Out[24]: '2.0.0.dev-55472ca'
But, a Windows XP machine running python 2.7.2 with numpy 1.6.1 gives:
a = np.ones((1024,1024),dtype=np.float32) a.mean() 4000.0 np.version.full_version '1.6.1'
This indeed looks very nasty, regardless of whether it is a version or platform related problem.
Looks like platform specific, same result as -eat Windows 7, Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
a = np.ones((1024,1024),dtype=np.float32) a.mean() 1.0
(4000*a).dtype dtype('float32') (4000*a).mean() 4000.0
b = np.load("data.npy") b.mean() 3045.7471999999998 b.shape (1000, 1000) b.mean(0).mean(0) 3045.7472499999999 _.dtype dtype('float64') b.dtype dtype('float32')
b.mean(dtype=np.float32) 3045.7471999999998
Josef
-eat
On Tue, 2012-01-24 at 17:12 -0600, eat wrote:
Hi,
Oddly, but numpy 1.6 seems to behave more consistent manner:
In []: sys.version
Out[]: '2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'
In []: np.version.version
Out[]: '1.6.0'
In []: d= np.load('data.npy')
In []: d.dtype
Out[]: dtype('float32')
In []: d.mean()
Out[]: 3045.7471999999998
In []: d.mean(dtype= np.float32)
Out[]: 3045.7471999999998
In []: d.mean(dtype= np.float64)
Out[]: 3045.747251076416
In []: (d- d.min()).mean()+ d.min()
Out[]: 3045.7472508750002
In []: d.mean(axis= 0).mean()
Out[]: 3045.7472499999999
In []: d.mean(axis= 1).mean()
Out[]: 3045.7472499999999
Or does the results of calculations depend more on the platform?
My 2 cents,
eat
-- -------------------------------------------------- Kathleen M. Tacina NASA Glenn Research Center MS 5-10 21000 Brookpark Road Cleveland, OH 44135 Telephone: (216) 433-6660 Fax: (216) 433-5802 --------------------------------------------------
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion

On Tue, Jan 24, 2012 at 4:21 PM, Kathleen M Tacina < Kathleen.M.Tacina@nasa.gov> wrote:
** I found something similar, with a very simple example.
On 64-bit linux, python 2.7.2, numpy development version:
In [22]: a = 4000*np.ones((1024,1024),dtype=np.float32)
In [23]: a.mean() Out[23]: 4034.16357421875
In [24]: np.version.full_version Out[24]: '2.0.0.dev-55472ca'
But, a Windows XP machine running python 2.7.2 with numpy 1.6.1 gives:
a = np.ones((1024,1024),dtype=np.float32) a.mean() 4000.0 np.version.full_version '1.6.1'
Yes, the results are platform/compiler dependent. The 32 bit platforms tend to use extended precision accumulators and the x87 instruction set. The 64 bit platforms tend to use sse2+. Different precisions, even though you might think they are the same. <snip> Chuck

On Wed, Jan 25, 2012 at 12:03 AM, Charles R Harris <charlesr.harris@gmail.com> wrote:
On Tue, Jan 24, 2012 at 4:21 PM, Kathleen M Tacina <Kathleen.M.Tacina@nasa.gov> wrote:
I found something similar, with a very simple example.
On 64-bit linux, python 2.7.2, numpy development version:
In [22]: a = 4000*np.ones((1024,1024),dtype=np.float32)
In [23]: a.mean() Out[23]: 4034.16357421875
In [24]: np.version.full_version Out[24]: '2.0.0.dev-55472ca'
But, a Windows XP machine running python 2.7.2 with numpy 1.6.1 gives:
a = np.ones((1024,1024),dtype=np.float32) a.mean() 4000.0 np.version.full_version '1.6.1'
Yes, the results are platform/compiler dependent. The 32 bit platforms tend to use extended precision accumulators and the x87 instruction set. The 64 bit platforms tend to use sse2+. Different precisions, even though you might think they are the same.
just to confirm, same computer as before but the python 3.2 version is 64 bit, now I get the "Linux" result Python 3.2 (r32:88445, Feb 20 2011, 21:30:00) [MSC v.1500 64 bit (AMD64)] on win32
import numpy as np np.__version__ '1.5.1' a = 4000*np.ones((1024,1024),dtype=np.float32) a.mean() 4034.16357421875 a.mean(0).mean(0) 4000.0 a.mean(dtype=np.float64) 4000.0
Josef
<snip>
Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (4)
-
Charles R Harris
-
eat
-
josef.pktd@gmail.com
-
Kathleen M Tacina