Вам редко нужны циклы для векторных операций в numpy. Вы можете создать неинициализированный массив и назначить все записи сразу:
>>> a = numpy.empty((3,3,))
>>> a[:] = numpy.nan
>>> a
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
Я рассчитал альтернативы a[:] = numpy.nan
здесь и a.fill(numpy.nan)
как отправлено 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
Сроки показывают предпочтение в ndarray.fill(..)
качестве более быстрой альтернативы. OTOH, мне нравится удобная реализация numpy, когда вы можете назначать значения целым слайсам в то время, намерение кода очень ясно.
Обратите внимание, что ndarray.fill
выполняет свою операцию на месте, поэтому numpy.empty((3,3,)).fill(numpy.nan)
вместо этого вернется None
.
np.nan
идет не так, когда преобразуется в Int.