[GRASS-user] Null-value in grass python array

Glynn Clements glynn at gclements.plus.com
Sat Oct 11 03:59:37 PDT 2014


Johannes Radinger wrote:

> I am using the GRASS-numpy functionality [1] to read a python numpy.array
> from a GRASS raster map (GRASS7):
> 
> import grass.script.array as garray
> 
> a = garray.array()
> 
> a.read(map)
> 
> Here [2] it says that also the null value can be specified. So what is the
> actual null value in GRASS so that the raster map is correctly saved as
> numpy.array with numpy.nan where appropriate?

For integer maps, the null value is -2^31 = -2147483648. For
floating-point maps, the null value is NaN.

Note that the null= parameter for read() and write() specifies the
value in the numpy array which is mapped to/from null values in the
GRASS raster.

If you're using floating-point numpy arrays, then use
null=numpy.nan[1]. For integer arrays, using null=-2147483648 will
ensure that valid values don't collide with nulls.

[1] This assumes that atof() and sscanf("%lf") recognise "nan"; this
is the case on Linux, but doesn't appear to work on Windows.

> And a second related question: Does grass.script.array.read() respect an
> existing MASK so that areas that are masked will get numpy.nan? Of course this can
> also be done within numpy like map[numpy.isnan(mask)] but this again needs
> to properly define the nan value when reading the raster mask into an
> numpy.array.

read() and write() use r.out.bin and r.in.bin respectively. r.out.bin
respects the MASK.

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the grass-user mailing list