Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当项目设置为fill_值时自动屏蔽np.ma数组_Python_Arrays_Numpy_Mask - Fatal编程技术网

Python 当项目设置为fill_值时自动屏蔽np.ma数组

Python 当项目设置为fill_值时自动屏蔽np.ma数组,python,arrays,numpy,mask,Python,Arrays,Numpy,Mask,我对numpy.ma屏蔽数组的行为及其fill\u值感到有点惊讶。例如,当我创建一个数组时: a = np.ma.array(np.zeros(4), mask=True, fill_value=-9999) 并更改其中一个值(例如,a[2]=1),掩码将自动设置为False: masked_array(data = [-- -- 1.0 --], mask = [ True True False True], fill_value = -9999.

我对numpy.ma屏蔽数组的行为及其
fill\u值
感到有点惊讶。例如,当我创建一个数组时:

a = np.ma.array(np.zeros(4), mask=True, fill_value=-9999)
并更改其中一个值(例如,
a[2]=1
),掩码将自动设置为False:

masked_array(data = [-- -- 1.0 --],
             mask = [ True  True False  True],
       fill_value = -9999.0)
但另一方面,如果我将
a[2]
设置为该屏蔽数组的
fill\u值,则该项不会自动屏蔽:

masked_array(data = [-- -- -9999.0 --],
             mask = [ True  True False  True],
       fill_value = -9999.0) 

当元素的值设置为等于填充值时,是否有一种自动方法使
np.ma
自动将元素的掩码设置为
True

您可能需要查看掩码文档。掩蔽会影响计算中值的显示和使用方式;但它不直接受这些值的影响。也就是说,值不会因为if等于fill而被屏蔽

但从掩蔽方法来看,我看到一种被描述为:

蒙版_对象(x,value[,copy,shrink])蒙版数组x,其中数据完全等于value

让我们用它做实验吧

In [185]: a = np.ma.array(np.zeros(4,int), mask=True, fill_value=-9999)
In [186]: a[2]=3
In [187]: a
Out[187]: 
masked_array(data = [-- -- 3 --],
             mask = [ True  True False  True],
       fill_value = -9999)
In [188]: a[2]=a.fill_value
In [189]: a
Out[189]: 
masked_array(data = [-- -- -9999 --],
             mask = [ True  True False  True],
       fill_value = -9999)
In [190]: np.ma.masked_object(a,a.fill_value)
Out[190]: 
masked_array(data = [-- -- -- --],
             mask = [ True  True  True  True],
       fill_value = -9999)
因此,它返回了一个带有屏蔽元素的副本,因为它等于fill_值。我在这里切换到“int”以避免浮点相等问题。还有另一种方法处理浮点相等

掩码_值(x,value[,rtol,atol,copy,…)使用浮点等式进行掩码

如果
a[2]=np.inf
(对于浮点
a
),则可以使用
np.ma.masked\u invalid

在后面的蒙面文档中,我发现:

将屏蔽数组的一个或多个特定项标记为无效的建议方法是为它们指定屏蔽的特殊值:

您在
a[2]=2
中看到的是

要取消屏蔽一个或多个特定条目,我们只需为其分配一个或多个新的有效值:


屏蔽数组是从计算中删除无效值的一种方法,如
mean
填充值
不是无效值;填充用于替换其他操作中的屏蔽值。无效值可能会“浮动”,如
np.nan
np.inf
,或任何适合您的问题的值(例如,负数)。

通常会屏蔽一个值,因为屏蔽的对应元素为真。另一种方式不起作用-由于值等于填充,所以未设置遮罩。
a[2]=np.ma.masked