在numpy数组中查找缺失值

6 投票
2 回答
15073 浏览
提问于 2025-04-16 01:23

好吧,这是个非常基础的问题。在我的程序里,我生成了一个二维的numpy数组,其中有些地方的值是缺失的(不是那种“nan”表示不存在的,而是“None”这种类型)。我想给这些缺失的值加个遮罩,但我似乎遇到了一些麻烦。通常来说,如果我想把所有值为2的地方遮住,我会这样做:

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

但是在这种情况下,无论我怎么尝试第一个参数,都好像不起作用。大家有什么想法吗?

2 个回答

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 ,-- ,]
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,而是原始值。实际上,一个整数数组是不能包含 None 的。

如果你想知道屏蔽值的索引,可以这样做:

>>> numpy.nonzero(m.mask)

文档中介绍了 numpy.nonzero() 的结果应该如何理解。

撰写回答