当项目设置等于fill_value时自动屏蔽np.ma数组

时间:2015-10-07 15:04:44

标签: python arrays numpy mask

我对numpy.ma蒙版数组及其fill_value的行为感到有些惊讶。例如,我创建一个数组:

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_value,则该项目不会自动屏蔽:

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

np.ma的值设置为等于True时,是否有一种自动方式使fill_value自动将元素的掩码设置为 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

1 个答案:

答案 0 :(得分:1)

您可能需要查看屏蔽文档。屏蔽会影响值在计算中的显示和使用方式;但它并不直接受价值观的影响。也就是说,一个值不会被掩盖,因为if等于填充。

但是看看掩蔽方法,我看到一个被描述为:

  

masked_object(x,value [,copy,shrink])掩盖数据正好等于value的数组x。

我们试试吧?

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)

因此它返回了一个带有a[2]元素掩盖的副本 - 因为它等于fill_value。我在这里切换到'int'以避免浮点平等问题。还有另一种处理浮点相等的方法。

  

masked_values(x,value [,rtol,atol,copy,...])使用浮点相等的掩码。

如果a[2]=np.inf(对于浮动a),则可以使用np.ma.masked_invalid

稍后在掩码文档中我发现:

  

将屏蔽数组的一个或多个特定条目标记为无效的推荐方法是指定屏蔽它们的特殊值:

a[2]=np.ma.masked

您在a[2]=2看到的内容由

解释
  

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

屏蔽数组是一种从mean等计算中删除无效值的方法。 fill_value不是无效值; fill用于替换其他操作中的掩码值。无效的值可能会像np.nannp.inf一样“浮动”,或者其他任何符合您问题的值(例如否定值)。