gpt4 book ai didi

python - 当项目集等于 fill_value 时自动屏蔽 np.ma 数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:31 25 4
gpt4 key购买 nike

我对 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 时?

最佳答案

您可能需要查看屏蔽文档。屏蔽影响值在计算中的显示和使用方式;但它并不受值的直接影响。也就是说,值不会仅仅因为 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 不是无效值;填充用于替换其他操作中的屏蔽值。无效值可能会“ float ”,例如 np.nannp.inf,或任何其他适合您问题的值(例如负值)。

关于python - 当项目集等于 fill_value 时自动屏蔽 np.ma 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com