Vous avez rarement besoin de boucles pour les opérations vectorielles dans numpy. Vous pouvez créer un tableau non initialisé et attribuer à toutes les entrées à la fois:
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.nan
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
J'ai chronométré les alternatives a[:] = numpy.nan
ici et a.fill(numpy.nan)
telles que publiées par 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
Les horaires montrent une préférence ndarray.fill(..)
comme alternative plus rapide. OTOH, j'aime l'implémentation pratique de numpy où vous pouvez attribuer des valeurs à des tranches entières à l'époque, l'intention du code est très claire.
Notez que ndarray.fill
effectue son opération sur place, donc numpy.empty((3,3,)).fill(numpy.nan)
reviendra à la place None
.
np.nan
mal lorsqu'il est converti en int.