当项集等于 fill_value 时自动屏蔽 np.ma 数组
Automatically mask np.ma array when item set equal to fill_value
我对 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
在元素的值设置为 fill_value
时自动将元素的掩码设置为 True
?
您可能需要查看屏蔽文档。屏蔽会影响值在计算中的显示和使用方式;但它不受值的直接影响。也就是说,一个值不会仅仅因为 if 等于填充值而被屏蔽。
但是在查看屏蔽方法时,我看到了一种被描述为:
masked_object(x, value[, copy, shrink]) Mask the array x where the data are exactly equal to 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)
所以它返回了一个 a[2]
元素被屏蔽的副本 - 因为它等于 fill_value。我在这里切换到 'int' 以避免浮点相等问题。还有另一种处理浮点相等性的方法。
masked_values(x, value[, rtol, atol, copy, ...]) Mask using floating point equality.
如果a[2]=np.inf
(对于浮点数a
),则可以使用np.ma.masked_invalid
。
稍后在屏蔽文档中我发现:
The recommended way to mark one or several specific entries of a masked array as invalid is to assign the special value masked to them:
a[2]=np.ma.masked
你在 a[2]=2
看到的内容由
解释
To unmask one or several specific entries, we can just assign one or several new valid values to them:
掩码数组是一种从 mean
等计算中删除无效值的方法。 fill_value
不是无效值;填充用于替换其他操作中的屏蔽值。无效值可能 'floats',例如 np.nan
和 np.inf
,或任何其他适合您的问题(例如负数)。
我对 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
在元素的值设置为 fill_value
时自动将元素的掩码设置为 True
?
您可能需要查看屏蔽文档。屏蔽会影响值在计算中的显示和使用方式;但它不受值的直接影响。也就是说,一个值不会仅仅因为 if 等于填充值而被屏蔽。
但是在查看屏蔽方法时,我看到了一种被描述为:
masked_object(x, value[, copy, shrink]) Mask the array x where the data are exactly equal to 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)
所以它返回了一个 a[2]
元素被屏蔽的副本 - 因为它等于 fill_value。我在这里切换到 'int' 以避免浮点相等问题。还有另一种处理浮点相等性的方法。
masked_values(x, value[, rtol, atol, copy, ...]) Mask using floating point equality.
如果a[2]=np.inf
(对于浮点数a
),则可以使用np.ma.masked_invalid
。
稍后在屏蔽文档中我发现:
The recommended way to mark one or several specific entries of a masked array as invalid is to assign the special value masked to them:
a[2]=np.ma.masked
你在 a[2]=2
看到的内容由
To unmask one or several specific entries, we can just assign one or several new valid values to them:
掩码数组是一种从 mean
等计算中删除无效值的方法。 fill_value
不是无效值;填充用于替换其他操作中的屏蔽值。无效值可能 'floats',例如 np.nan
和 np.inf
,或任何其他适合您的问题(例如负数)。