在2D numpy MaskedArray中通过赋值取消屏蔽元素

时间:2015-06-02 20:59:49

标签: python numpy

使用1维numpy MaskedArray,我可以指定一个取消屏蔽数组的元素:

In [183]: x = np.ma.MaskedArray(data=np.zeros((2),dtype=float),mask=True)

In [184]: x[0] = 9

In [185]: x
Out[185]:
masked_array(data = [9.0 --],
         mask = [False  True],
   fill_value = 1e+20)

使用二维数组时,指定单个值不会取消屏蔽数组:

In [186]: x = np.ma.MaskedArray(data=np.zeros((2,2),dtype=float),mask=True)

In [187]: x[0][0] = 9

In [188]: x
Out[188]:
masked_array(data =
 [[-- --]
 [-- --]],
             mask =
 [[ True  True]
 [ True  True]],
       fill_value = 1e+20)

如果我分配给切片,则切片将被取消屏蔽

In [189]: x[0] = 9

In [190]: x
Out[190]:
masked_array(data =
 [[9.0 9.0]
 [-- --]],
             mask =
 [[False False]
 [ True  True]],
       fill_value = 1e+20)

如何指定单个值来取消屏蔽它?

1 个答案:

答案 0 :(得分:2)

x[0, 0] = 9

看起来当你执行x[0][0] = 9时,NumPy将x[0]临时掩码从x的掩码中解耦,因此赋值只会取消屏蔽{{ 1}}临时的。相关代码位于numpy/ma/core.py

x[0]

我不知道为什么会这样做。