如何测试numpy数组中的每个元素是否被屏蔽?这是我想做的事情:
x = #is a maksed numpy array
masked_min = numpy.ma.min(x)
if masked_min IS NOT A MASKED ELEMENT:
#do some stuff only if masked_min is a value
Run Code Online (Sandbox Code Playgroud)
在实践中我看到这个:
>>> x = numpy.ma.array(numpy.array([1,2,3]),mask=[True,True,True])
>>> masked_min = numpy.ma.min(x)
masked
Run Code Online (Sandbox Code Playgroud)
测试masked没有帮助:
>>> numpy.ma.sum(x) == numpy.ma.masked
masked
Run Code Online (Sandbox Code Playgroud)
DSM*_*DSM 15
如果通过"测试整个数组是否在numpy中被屏蔽"意味着是否每个元素都被屏蔽,因为屏蔽本身就是一个数组,你可以使用.mask.all():
>>> x = numpy.ma.array(numpy.array([1,2,3]),mask=[True,True,True])
>>> x
masked_array(data = [-- -- --],
mask = [ True True True],
fill_value = 999999)
>>> x.mask
array([ True, True, True], dtype=bool)
>>> x.mask.all()
True
Run Code Online (Sandbox Code Playgroud)
或许.count(),但那是轴依赖的.OTOH如果你真的只需要测试你的最小呼叫的结果是否"被屏蔽",你可以直接这样做:
>>> numpy.ma.min(x)
masked
>>> type(_)
<class 'numpy.ma.core.MaskedConstant'>
>>> isinstance(numpy.ma.min(x), numpy.ma.core.MaskedConstant)
True
>>> numpy.ma.min(x) is numpy.ma.masked
True
Run Code Online (Sandbox Code Playgroud)
[可能有更简单的方法来做到这一点; 我自己很少使用蒙面数组.]
我认为最 Pythonic 的方法是只做你想做的事情,然后捕获整个数组被屏蔽时产生的任何错误。
例如:
x = numpy.ma.array(numpy.array([1,2,3]),mask=[True,True,True])
try:
my_min = numpy.min(x[~x.mask])
# Continue with my_min
except ValueError:
# Bail or what have you
print 'Masks all around!'
Run Code Online (Sandbox Code Playgroud)