NaN comparisons - Call For Anecdotes

Skip Montanaro skip at pobox.com
Tue Jul 8 13:49:08 EDT 2014


>>> import numpy
>>> a1 = numpy.ones(5)
>>> a1
array([ 1.,  1.,  1.,  1.,  1.])
>>> a0 = numpy.zeros(5)
>>> a0
array([ 0.,  0.,  0.,  0.,  0.])
>>> a1 / a0
__main__:1: RuntimeWarning: divide by zero encountered in true_divide
array([ inf,  inf,  inf,  inf,  inf])
>>> nans = numpy.array([float("nan")] * 5)
>>> nans
array([ nan,  nan,  nan,  nan,  nan])
>>> a1 / nans
array([ nan,  nan,  nan,  nan,  nan])
>>> a1 / a0 * nans
array([ nan,  nan,  nan,  nan,  nan])

You get a runtime warning (this is in Python 2.7), but the division
returns the appropriate value, in this case, infinity. So, yes, they
forge on, and NaN taints things just about the way you'd expect.

Skip

On Tue, Jul 8, 2014 at 12:36 PM, Marko Rauhamaa <marko at pacujo.net> wrote:
> Skip Montanaro <skip at pobox.com>:
>
>> In addition to what others have written, I will add one thing. There
>> are certainly situations where raising an exception is bad. Consider
>> all the people in the scientific computing community doing fancy
>> linear algebra sorts of things, often with missing data. They
>> generally want NaN propagated and not have some long running
>> calculation crash in the middle.
>
> Do the scientific computers mind:
>
>     >>> 1 / 0
>     Traceback (most recent call last):
>       File "<stdin>", line 1, in <module>
>     ZeroDivisionError: division by zero
>
> or would they prefer their fancy linear-algebraic computation to just
> forge on?
>
>
> Marko
> --
> https://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list