[Numpy-discussion] OverflowError using _nanop with unsigned integers
Tony S Yu
tsyu80 at gmail.com
Thu Nov 19 15:30:44 EST 2009
Hi,
Functions that call _nanop (i.e. nan[arg]min, nan[arg]max) currently fail with unsigned integers. For example:
>>> np.nanmin(np.array([0, 1], dtype=np.uint8))
OverflowError: cannot convert float infinity to integer
It seems that unsigned integers don't get identified as integers in the _nanop function. Checking against `np.integer` instead of the built-in `int` will catch signed and unsigned integers, as shown below.
Cheers,
-Tony
Note: the diff below also contains a change I made to fix ticket #1177
Index: numpy/lib/function_base.py
===================================================================
--- numpy/lib/function_base.py (revision 7749)
+++ numpy/lib/function_base.py (working copy)
@@ -1038,6 +1038,8 @@
"""
if isinstance(x, (float, int, number)):
return compiled_interp([x], xp, fp, left, right).item()
+ elif isinstance(x, np.ndarray) and x.ndim == 0:
+ return compiled_interp(x[np.newaxis], xp, fp, left, right)[0]
else:
return compiled_interp(x, xp, fp, left, right)
@@ -1349,7 +1351,7 @@
mask = isnan(a)
# We only need to take care of NaN's in floating point arrays
- if not np.issubdtype(y.dtype, int):
+ if not np.issubdtype(y.dtype, np.integer):
y[mask] = fill
res = op(y, axis=axis)
More information about the NumPy-Discussion
mailing list