C Module's '1.#INF' changes to 'inf' at Python

Robert Kern robert.kern at gmail.com
Mon Jan 11 17:14:04 EST 2010


On 2010-01-11 14:31 PM, CELEN Erman wrote:
>>> (I also noticed that this behavior is same under standard NumPy 1.4
>>> with standard Python 2.6 on Windows. If you call numpy.log10(0.0) you
>>> will get an "-inf" and no exceptions will be raised. Which is not the
>>> case with Python's standard math.log10(0.0) which will raise a
>>> ValueError)
>>
>> Correct. This is numpy's intended behavior. See numpy.seterr() to enable
>> exceptions if you want them.
>
> Numpy.seterr() doesn't seem to be working in case of log10(0.0) (output with all standard: Python2.6 with NumPy1.4 on Windows-32bit is below)
>
>    Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
>    Type "help", "copyright", "credits" or "license" for more information.
>    >>>  import numpy
>    >>>  numpy.seterr()
>    {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'}
>    >>>  numpy.int16(32000) * numpy.int16(3)
>    30464
>    >>>  numpy.log10(0.0)
>    -inf
>    >>>  numpy.seterr(all='raise')
>    {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'}
>    >>>  numpy.int16(32000) * numpy.int16(3)
>    Traceback (most recent call last):
>      File "<stdin>", line 1, in<module>
>    FloatingPointError: overflow encountered in short_scalars
>    >>>  numpy.log10(0.0)
>    -inf
>    >>>  numpy.log10(-1.0)
>    nan
>    >>>  numpy.seterr()
>    {'over': 'raise', 'divide': 'raise', 'invalid': 'raise', 'under': 'raise'}
>    >>>

That might be an issue with how numpy is detecting the floating point exception 
on Windows. Please report it. It works fine on OS X:

In [1]: np.seterr(all='raise')
Out[1]: {'divide': 'print', 'invalid': 'print', 'over': 'print', 'under': 'ignore'}

In [2]: np.log10(0.0)
---------------------------------------------------------------------------
FloatingPointError                        Traceback (most recent call last)

/Users/rkern/<ipython console> in <module>()

FloatingPointError: divide by zero encountered in log10

In [3]: np.log10(-1.0)
---------------------------------------------------------------------------
FloatingPointError                        Traceback (most recent call last)

/Users/rkern/<ipython console> in <module>()

FloatingPointError: invalid value encountered in log10

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list