Одним из решений было бы установить минимальную высоту для полей. К сожалению, кажется, что это не очень хорошо поддерживается IE (сюрприз).
Вам редко нужны циклы для векторных операций в 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)
, как написано Блаенком:
$ 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, где вы можете назначать значения целым фрагментам одновременно, намерение кода очень ясное.
Вы знакомы с numpy.nan
?
Вы можете создать свой собственный метод, например:
def nans(shape, dtype=float):
a = numpy.empty(shape, dtype)
a.fill(numpy.nan)
return a
Тогда
nans([3,4])
выведет
array([[ NaN, NaN, NaN, NaN],
[ NaN, NaN, NaN, NaN],
[ NaN, NaN, NaN, NaN]])