Нахождение отсутствующих значений в массиве numpy

Хорошо, экстремальный вопрос о новобранце здесь. В моей программе я генерирую 2D массив numpy, некоторые из которых являются записями, отсутствуют (не "nan" довольно несуществующее, но добрый "Ни один", или NoneType). Я хотел бы поместить маску по этим записям, но я, кажется, испытываю некоторые затруднения при выполнении так. Обычно, к маске, скажем, все записи со значением 2, я сделал бы

A = np.ma.masked_where ([== 2], A)

В этом случае это, кажется, не работает независимо от того, что я пробую за первый параметр. Мысли?

6
задан user391045 16 July 2010 в 18:25
поделиться

2 ответа

Поскольку у вас есть -- записей в вашем массиве, я полагаю, это означает, что они уже замаскированы:

>>> 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() описано, как следует интерпретировать ее результат.

5
ответ дан 10 December 2019 в 00:31
поделиться

Чтобы найти элементы в массиве 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 ,-- ,]
5
ответ дан 10 December 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: