Поиск пропущенных значений в массиве NumPy - PullRequest
6 голосов
/ 16 июля 2010

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

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

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

Ответы [ 2 ]

5 голосов
/ 17 июля 2010

Чтобы найти элементы в массиве 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 голосов
/ 16 июля 2010

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

>>> 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.

Если вам нужны индексы маскируемых значений, вы можете сделать:

>>> numpy.nonzero(m.mask)

Документация из numpy.nonzero() описывает, как его результат должен интерпретироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...