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

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.

Another option is to use `numpy.full`

, an option available in NumPy 1.8+

```
a = np.full([height, width, 9], np.nan)
```

This is pretty flexible and you can fill it with any other number that you want.

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow