У меня есть массив массивов 3D размером [2000x7200x40] (мы назовем его «осадка»), который я хотел бы замаскировать для определенных значений (-9999), которые будут исключены из классификации scipy.mstats.rankdata(precip,axis=2,use_missing=False)
.
Думайте о данных как:
[-9999, 2, 3, 5, -9999
4, 7, -9999, 6]...
Мне в большинстве случаев это не удалось; кажется, что большинство np.ma
функций, таких как np.ma.masked_invalid
, применяются только к 1-D массиву.
-9999 значения могут быть разными для каждого массива во временном ряду (z).
Я пробовал такие простые функции, как:
#mask the -9999 values out
mask = np.empty_like(precip)
mask = ~(precip == -9999).all(axis=2,keepdims=True)
, а затем транслировать это в трехмерный массив с mask = [numpy.newaxis,:,:]
Однако это приводит к массиву 2000x7200x1, который затем выдает ошибку измерения при умножении на осадку, поскольку он ожидает массив измерения 40.
Есть ли какая-то простая функция или фрагмент кода, который я пропустил, который легко сделает это для меня? Спасибо за любую помощь!