Rzadko potrzeba pętli do operacji wektorowych w numpy. Można utworzyć niezainicjowanej tablicę i przypisać do wszystkich wpisów na raz:
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.nan
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
mam czasowe alternatywy a[:] = numpy.nan
tutaj i a.fill(numpy.nan)
jak wysłane przez 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
Te czasy pokazują preferencja dla ndarray.fill(..)
jako szybsza alternatywa. OTOH, lubię wygodną implementację numpy, w której można przypisywać wartości do całych plasterków w tym czasie, intencje kodu są bardzo jasne.
Jednym z zastrzeżeń jest to, że NumPy nie ma liczby całkowitej NA (w przeciwieństwie do R). Zobacz [panda lista gotchas] (http://pandas.pydata.org/pandas-docs/stable/gotchas.html). W związku z tym 'np.nan' idzie nie tak po konwersji na int. – smci
smci ma rację. Dla NumPy nie ma takiej wartości NaN. Zależy więc od typu i NumPy, która wartość będzie dla NaN. Jeśli nie jesteś tego świadomy, spowoduje to kłopoty. – Ralf