Can't exponentiate zero in NumPy

Rick Muller rpm at wag.caltech.edu
Mon Sep 9 11:39:48 EDT 2002


I found out more about this problem, and I'm still hoping that someone 
can suggest a good fix.

The problem comes when I take a power of a NumPy array that has very 
small values in it:

 >>> from Numeric import *
 >>> a = zeros(3,Float)
 >>> a**2
array([0., 0., 0.])
 >>> a[1] = 1.e-310
 >>> a**2
Traceback (most recent call last):
    File "<stdin>", line 1, in ?
OverflowError: math range error

This crashes on Linux, but not on Mac OS X.

Is this a bug or a feature?

If it's a feature (which it might be), can someone offer a one-line 
workaround? What I would like to do is set everything below a small 
value (say 1.e-16) to zero. Obviously,
 >>> for i in range(len(a)): if a[i] < 1.e-16: a[i] = 0
or something like it should work, but it will also be slow, and I was 
hoping that one of the Numeric UFuncs might do the same thing more 
effectively.

Thanks in advance for any help anyone can offer.

Rick




More information about the Python-list mailing list