Sie benötigen selten Schleifen für Vektoroperationen in Numpy. Sie können ein nicht initialisiertes Array erstellen und allen Einträgen gleichzeitig zuweisen:
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.nan
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
Ich habe die Alternativen a[:] = numpy.nan
hier und a.fill(numpy.nan)
wie von Blaenk gepostet zeitlich festgelegt:
$ 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
Die Timings zeigen eine Präferenz für ndarray.fill(..)
die schnellere Alternative. OTOH, ich mag die praktische Implementierung von numpy, bei der Sie ganzen Slices gleichzeitig Werte zuweisen können. Die Absicht des Codes ist sehr klar.
Beachten Sie, dass ndarray.fill
der Vorgang direkt ausgeführt numpy.empty((3,3,)).fill(numpy.nan)
wird und stattdessen zurückgegeben wird None
.
np.nan
geht es schief, wenn es in int konvertiert wird.