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 スカラーと同様に、shape()で、サイズが 1 です。

mask=Falsemask=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 に答える