Rara vez se necesitan bucles para operaciones vectoriales en numpy. Puede crear una matriz sin inicializar y asignar a todas las entradas a la vez:
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.nan
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
he cronometrado las alternativas a[:] = numpy.nan
aquí y a.fill(numpy.nan)
tal como fue anunciado por 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
Los horarios muestran una preferencia por ndarray.fill(..)
como la alternativa más rápida. OTOH, me gusta la implementación de conveniencia de Numpy, donde puedes asignar valores a rebanadas enteras en el momento, la intención del código es muy clara.
Una advertencia es que NumPy no tiene un valor NA entero (a diferencia de R). Ver [lista de pandas de gotchas] (http://pandas.pydata.org/pandas-docs/stable/gotchas.html). Por lo tanto 'np.nan' sale mal cuando se convierte a int. – smci
smci tiene razón. Para NumPy no hay tal valor de NaN. Entonces depende del tipo y en NumPy qué valor estará allí para NaN. Si no está enterado de esto, causará problemas – Ralf