首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试numpy数组中的每个元素是否都被屏蔽

如何测试numpy数组中的每个元素是否都被屏蔽
EN

Stack Overflow用户
提问于 2012-06-03 12:52:47
回答 2查看 5.7K关注 0票数 6

如何测试numpy数组中的每个元素是否都被屏蔽了?这是我想要做的:

代码语言:javascript
复制
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

在实践中,我看到这样的情况:

代码语言:javascript
复制
>>> x = numpy.ma.array(numpy.array([1,2,3]),mask=[True,True,True])
>>> masked_min = numpy.ma.min(x)
masked

测试masked没有任何帮助:

代码语言:javascript
复制
>>> numpy.ma.sum(x) == numpy.ma.masked
masked
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-03 13:14:17

我认为最有Pythonic风格的方法是只做你想做的事情,然后在整个数组被屏蔽的情况下捕获任何错误。

例如:

代码语言:javascript
复制
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!'
票数 3
EN

Stack Overflow用户

发布于 2012-06-03 13:09:41

如果您所说的“测试是否在numpy中屏蔽了整个数组”是指是否每个元素都被屏蔽了,因为掩码本身是一个数组,那么可以使用.mask.all()

代码语言:javascript
复制
>>> 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

或者是.count(),但这是依赖于轴的。OTOH如果你真的只需要测试min调用的结果是否被“屏蔽”了,你可以直接这样做:

代码语言:javascript
复制
>>> 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

可能有更简单的方法可以做到这一点;我自己很少使用掩码数组。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10867994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档