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

Charles R Harris charlesr.harris at gmail.com
Mon Apr 11 15:39:00 EDT 2011


On Mon, Apr 11, 2011 at 12:54 PM, Skipper Seabold <jsseabold at gmail.com>wrote:

> 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])
>
>
Looks like it is going through float16:

In [2]: float16(1.345)/0.5955447
Out[2]: 2.25797754979601

The scalar 1.345 should be converted to double and that isn't happening.

<snip>

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110411/ea2c3592/attachment.html>


More information about the NumPy-Discussion mailing list