2010-07-16 286 views
5

好的,这里有个极端的菜鸟问题。在我的程序中,我生成了一个2D numpy数组,其中一些条目缺失(不是“nan”类型的不可分类,但是“None”类型或NoneType)。我想为这些条目设置一个掩码,但我似乎在这样做时遇到了一些麻烦。通常,以掩蔽在,比方说,具有值2的所有条目,我愿意做在numpy数组中找到缺失值

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

在这种情况下,没有按无论我为第一个参数尝试什么,似乎都不起作用。思考?

回答

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()documentation描述了它的结果如何,请解释。

+0

好点。经过更多的调查,我发现你是对的。实际上这个问题的价值观似乎是我之前没有注意到的,实际上是“无”。 所以,现在我要改变这个问题到它应该是什么:你如何去找到“无”的价值观? A [A ==无]只是出于某种原因给出了A [0 ,:]。 – user391045 2010-07-16 18:23:36

+0

我在答案中增加了更多信息:我希望你能找到你需要的东西! :) – EOL 2010-07-17 07:41:32

+0

@ dave-schultz:如果您在上述评论中的重述是对问题的更清晰的陈述,那么如果您编辑了您的问题以反映此问题,这将会很有帮助。更多人会阅读你的问题,而不是你在这里的评论。 – tom10 2010-07-18 02:00:53

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