[Numpy-discussion] Odd numerical difference between Numpy 1.5.1 and Numpy > 1.5.1

Skipper Seabold jsseabold at gmail.com
Mon Apr 11 14:54:03 EDT 2011


All,

We noticed some failing tests for statsmodels between numpy 1.5.1 and
numpy >= 1.6.0. These are the versions where I noticed the change. It
seems that when you divide a float array and multiply by a boolean
array the answers are different (unless the others are also off by
some floating point). Can anyone replicate the following using this
script or point out what I'm missing?

import numpy as np
print np.__version__
np.random.seed(12345)

test = np.random.randint(0,2,size=10).astype(bool)
t = 1.345
arr = np.random.random(size=10)

arr # okay
t/arr # okay
(1-test)*arr # okay
(1-test)*t/arr # huh?

Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> print np.__version__
2.0.0.dev-fe3852f
>>> np.random.seed(12345)
>>>
>>> test = np.random.randint(0,2,size=10).astype(bool)
>>> t = 1.345
>>> arr = np.random.random(size=10)
>>>
>>> arr # okay
array([ 0.5955447 ,  0.96451452,  0.6531771 ,  0.74890664,  0.65356987,
        0.74771481,  0.96130674,  0.0083883 ,  0.10644438,  0.29870371])
>>> t/arr # okay
array([   2.25843668,    1.39448393,    2.05916589,    1.7959515 ,
          2.0579284 ,    1.79881418,    1.39913718,  160.342421  ,
         12.63570742,    4.50278968])
>>> (1-test)*arr # okay
array([ 0.5955447 ,  0.        ,  0.        ,  0.        ,  0.65356987,
        0.        ,  0.96130674,  0.0083883 ,  0.        ,  0.29870371])
>>> (1-test)*t/arr # huh?
array([   2.25797754,    0.        ,    0.        ,    0.        ,
          2.05751003,    0.        ,    1.39885274,  160.3098235 ,
          0.        ,    4.50187427])


Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> print np.__version__
1.5.1
>>> np.random.seed(12345)
>>>
>>> test = np.random.randint(0,2,size=10).astype(bool)
>>> t = 1.345
>>> arr = np.random.random(size=10)
>>>
>>> arr # okay
array([ 0.5955447 ,  0.96451452,  0.6531771 ,  0.74890664,  0.65356987,
        0.74771481,  0.96130674,  0.0083883 ,  0.10644438,  0.29870371])
>>> t/arr # okay
array([   2.25843668,    1.39448393,    2.05916589,    1.7959515 ,
          2.0579284 ,    1.79881418,    1.39913718,  160.342421  ,
         12.63570742,    4.50278968])
>>> (1-test)*arr # okay
array([ 0.5955447 ,  0.        ,  0.        ,  0.        ,  0.65356987,
        0.        ,  0.96130674,  0.0083883 ,  0.        ,  0.29870371])
>>> (1-test)*t/arr # huh?
array([   2.25843668,    0.        ,    0.        ,    0.        ,
          2.0579284 ,    0.        ,    1.39913718,  160.342421  ,
          0.        ,    4.50278968])

Skipper



More information about the NumPy-Discussion mailing list