У меня есть следующий код:
r = numpy.zeros(shape = (width, height, 9))
Создает width x height x 9
матрицу, заполненную нулями. Вместо этого я хотел бы знать, есть ли функция или способ инициализировать их, вместо того, чтобы NaN
использовать простой способ.
np.nan
идет не так, когда преобразуется в Int.Ответы:
Вам редко нужны циклы для векторных операций в numpy. Вы можете создать неинициализированный массив и назначить все записи сразу:
Я рассчитал альтернативы
a[:] = numpy.nan
здесь иa.fill(numpy.nan)
как отправлено Blaenk:Сроки показывают предпочтение в
ndarray.fill(..)
качестве более быстрой альтернативы. OTOH, мне нравится удобная реализация numpy, когда вы можете назначать значения целым слайсам в то время, намерение кода очень ясно.Обратите внимание, что
ndarray.fill
выполняет свою операцию на месте, поэтомуnumpy.empty((3,3,)).fill(numpy.nan)
вместо этого вернетсяNone
.источник
a = numpy.empty((3, 3,)) * numpy.nan
. Он рассчитан быстрее,fill
но медленнее, чем метод присваивания, но это единственная возможность !!.fill()
метод, но разница в скоростях сводится практически к нулю, когда массивы становятся больше.np.empty([2, 5])
создает массив, затемfill()
модифицирует этот массив на месте, но не возвращает копию или ссылку. Если вы хотите вызыватьnp.empty(2, 5)
по имени («присваивать переменной»), вы должны сделать это, прежде чем выполнять операции с ней на месте. То же самое происходит, если вы делаете[1, 2, 3].insert(1, 4)
. Список создается и вставляется 4, но невозможно получить ссылку на список (и, таким образом, можно предположить, что он был собран мусором). Для неизменяемых данных, таких как строки, возвращается копия, потому что вы не можете работать на месте. Панды могут сделать оба.