在numpy数组中查找缺失值

use*_*045 6 python numpy

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

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

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

Eri*_*got 5

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

>>> m = ma.masked_where([True, False]*5, arange(10))
>>> print m
[-- 1 -- 3 -- 5 -- 7 -- 9]
Run Code Online (Sandbox Code Playgroud)

所以,我会说你的条目已被屏蔽,你可以直接使用你的数组.

如果要创建仅包含非屏蔽值的数组,则可以执行此操作

>>> m[~m.mask]
[1 3 5 7]
Run Code Online (Sandbox Code Playgroud)

m你的蒙面数组在哪里.

如果要获取屏蔽值列表,只需选择其他值:

>>> m[m.mask]
[0 2 4 6 8]
Run Code Online (Sandbox Code Playgroud)

请注意,缺失值不是 None,而是一般的原始值.实际上,整数数组不能包含None.

如果你想要掩码值的索引,你可以这样做:

>>> numpy.nonzero(m.mask)
Run Code Online (Sandbox Code Playgroud)

文档numpy.nonzero()描述了它的结果如何,请解释.


tom*_*m10 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 ,-- ,]
Run Code Online (Sandbox Code Playgroud)