Хорошо, экстремальный вопрос о новобранце здесь. В моей программе я генерирую 2D массив numpy, некоторые из которых являются записями, отсутствуют (не "nan" довольно несуществующее, но добрый "Ни один", или NoneType). Я хотел бы поместить маску по этим записям, но я, кажется, испытываю некоторые затруднения при выполнении так. Обычно, к маске, скажем, все записи со значением 2, я сделал бы
A = np.ma.masked_where ([== 2], A)
В этом случае это, кажется, не работает независимо от того, что я пробую за первый параметр. Мысли?
Поскольку у вас есть --
записей в вашем массиве, я полагаю, это означает, что они уже замаскированы:
>>> m = ma.masked_where([True, False]*5, arange(10))
>>> print m
[-- 1 -- 3 -- 5 -- 7 -- 9]
Итак, я бы сказал, что ваши записи уже замаскированы и что вы можете напрямую использовать ваш массив.
Если вы хотите создать массив, содержащий только немаскированные значения, вы можете сделать
>>> m[~m.mask]
[1 3 5 7]
где m
- ваш маскированный массив.
Если вы хотите иметь список замаскированных значений, вы можете просто выбрать другие значения:
>>> m[m.mask]
[0 2 4 6 8]
Обратите внимание, что пропущенные значения не None, а в общем случае являются исходными значениями. На самом деле, массив целых чисел не может содержать None.
Если вам нужны индексы замаскированных значений, вы можете сделать следующее:
>>> numpy.nonzero(m.mask)
В документации по numpy.nonzero()
описано, как следует интерпретировать ее результат.
Чтобы найти элементы в массиве numpy, которые являются None, вы можете использовать numpy.equal. Вот пример:
import numpy as np
import MA
x = np.array([1, 2, None])
print np.equal(x, None)
# array([False, False, True], dtype=bool)
# to get a masked array
print MA.array(x, mask=np.equal(x,None))
# [1 ,2 ,-- ,]