[SciPy-user] NaN's in numpy (and Scipy)

Pierre GM pgmdevlist at gmail.com
Sat Jan 6 18:52:50 CST 2007

On Saturday 06 January 2007 18:47, Vincent Nijs wrote:
> I see. But when you assign a float (e.g., nan or 0.1) to an element of an
> array filled with 'int16' elements the array is not up-cast but the element
> down-cast.


When you create an array, you select a particular area of memory. How much 
depends on the shape of the array, and its dtype. Picture building a 
checkboard with a given number of rows and columns (the shape), and with a 
fixed cell size (the dtype). Once the array is created, you can't fill a cell 
with some data larger than the cell size: the data has to be shrunk to fit.

So, once you create an array of int_, any float/complex you add to it will be 
shrunk to int_, because the memory space has been already allocated for int_ 
and nothing larger.

If you really want another larger tile size, then you have to create a new 
array from scratch. That's what you do by using 'astype'.

In our particular case:
If you expect missing data as NaN, then use float_ as a default (which most of 
the numpy functions do). Note that you're not limited to NaN for the missing 
data: anything can do:
>>> x = MA.array([1,2,-99,4], mask=(x=-99))
will work, so will
>>> x=MA.masked_values([1,2,-99,4], -99)

More information about the SciPy-user mailing list