Инициализация массива 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)
Другие вопросы по тегам