Инициализация массива Python (предварительное распределение) с помощью nans
Я хочу инициализировать массив, который будет содержать некоторые данные. Я создал случайную матрицу (используя np.empty
), а затем умножить его на np.nan
, Что-то не так с этим? Или есть лучшая практика, которой я должен придерживаться?
Для дальнейшего объяснения моей ситуации: у меня есть данные, которые мне нужно хранить в массиве. Скажем, у меня есть 8 строк данных. Количество элементов в каждой строке не равно, поэтому длина строки моей матрицы должна быть равна длине самой длинной строки. В других строках некоторые элементы не будут заполнены. Я не хочу использовать нули, так как некоторые из моих данных могут фактически быть нулями.
Я понимаю, что могу использовать какое-то значение, которое, я знаю, никогда не будет моим данными, но nans определенно понятнее Просто интересно, может ли это вызвать проблемы позже с обработкой. Я понимаю, что мне нужно использовать nanmax
вместо max
и так далее.
1 ответ
Я создал случайную матрицу (используя np.empty), а затем умножил ее на np.nan. Что-то не так с этим? Или есть лучшая практика, которой я должен придерживаться?
Ты можешь использовать np.full
, например:
np.full((100, 100), np.nan)
Однако в зависимости от ваших потребностей вы можете взглянуть на numpy.ma
для маскированных массивов или scipy.sparse
для разреженных матриц. Это может или не может быть подходящим, хотя. В любом случае вам может понадобиться использовать разные функции из соответствующего модуля вместо обычных numpy ufuncs.
Мне нравится это делать, что, вероятно, не самый лучший, но его легко запомнить - это добавить метод nans к объекту numpy следующим образом:
import numpy as np
def nans(n):
return np.array([np.nan for i in range(n)])
setattr(np,'nans',nans)
и теперь вы можете просто использовать np.nans, как если бы это были np.zeros:
np.nans(10)