devoured elysium - 1 year ago 94

Python Question

I have the following code:

`r = numpy.zeros(shape = (width, height, 9))`

It creates a width x height x 9 matrix filled with zeros. Instead, I'd like to know if there's a function or way to initialize them instead to NaN.

Is there any? Without having to resort to manually doing loops and such?

Thanks

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

You rarely need loops for vector operations in numpy. You can create an uninitialized array and assign to all entries at once:

```
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.NAN
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
```

I have timed the alternatives `a[:] = numpy.nan`

here and `a.fill(numpy.nan)`

as posted by Blaenk:

```
$ python -mtimeit "import numpy as np; a = np.empty((100,100));" "a.fill(np.nan)"
10000 loops, best of 3: 54.3 usec per loop
$ python -mtimeit "import numpy as np; a = np.empty((100,100));" "a[:] = np.nan"
10000 loops, best of 3: 88.8 usec per loop
```

The timings show a preference for `ndarray.fill(..)`

as the faster alternative. OTOH, I like numpy's convenience implementation where you can assign values to whole slices at the time, the code's intention is very clear.