shrink-option不适用于numpy蒙面数组

时间:2012-11-02 13:38:50

标签: arrays numpy shrink maskedinput

我创建了一个numpy蒙面数组,其shrink-option设置为False(应生成一个全尺寸的蒙版),然后检查蒙版的大小:

import numpy as np
import numpy.ma as ma
x = ma.array(range(10),shrink=False)
print 'mask size = ', np.array(x.mask).size

产生:mask size = 1,即掩码仍然是默认(收缩)标量掩码。

这是一个(已知)错误吗?

更新的 似乎选项shrink=True也无法正常运行:

x = ma.array(range(3), mask=True, shrink=True)
x.__setmask__(ma.nomask)                    # remove the mask (should shrink now)
x.mask.size                                 # returns 3, so mask has not shrunk!
_ = x.shrink_mask()                         # enforce shrinking
x.mask.size                                 # returns 1, so only now it's OK 

2 个答案:

答案 0 :(得分:4)

这里有一个误解:shrink选项标志可以防止在操作中压缩掩码,而不是在创建时。要获取显式掩码(作为一个充满False的布尔数组),请在创建时使用mask=False标志。 不过,我同意它应该被视为一个错误。好的捕获。


当没有给出显式掩码时,默认值为nomask,一个对应于np.bool_(0)的特殊值:它是一个值为False的numpy布尔标量,就像任何numpy标量一样,shape (),大小为1。

请注意mask=Falsemask=nomask之间的区别:mask=False会将掩码创建为ndarray,其形状与数据相同但充满False(这是一个快捷方式) ),mask=nomask只告诉np.ma未设置掩码(加速计算)。

答案 1 :(得分:2)

尝试设置掩码(无论是False还是True):

>>> np.ma.array(range(10), mask=False, shrink=False)
masked_array(data = [0 1 2 3 4 5 6 7 8 9],
             mask = [False False False False False False False False False False],
       fill_value = 999999)

>>> np.ma.array(range(10), mask=True, shrink=False)
masked_array(data = [-- -- -- -- -- -- -- -- -- --],
             mask = [ True  True  True  True  True  True  True  True  True  True],
       fill_value = 999999)

mask参数的默认值为nomask,但显然不生成任何掩码(因此没有任何内容可以“取消”)。请注意,为什么它仍然显示大小为1。