在numpy数组中查找缺失值

时间:2010-07-16 06:32:06

标签: python numpy

好吧,极端的菜鸟问题在这里。在我的程序中,我生成了一个2D numpy数组,其中一些条目缺失(不是“nan”类型的nonxistant,而是“None”类,或NoneType)。我想在这些条目上加上一个掩码,但我似乎遇到了一些麻烦。通常,要掩盖所有值为2的条目,我会做

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

在这种情况下,无论我尝试第一个参数,这似乎都不起作用。想法?

2 个答案:

答案 0 :(得分:5)

由于您的数组中有--个条目,我猜这意味着它们已被屏蔽:

>>> 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()的{​​{3}}描述了必须如何解释其结果。

答案 1 :(得分:5)

要在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 ,-- ,]