1

我创建了一个 numpy 掩码数组,其收缩选项设置为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 
4

2 回答 2

4

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


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

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

于 2012-11-02T16:55:33.367 回答
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。

于 2012-11-02T15:07:42.983 回答