我对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;
?
答案 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.nan
和np.inf
一样“浮动”,或者其他任何符合您问题的值(例如否定值)。