在Numpy中切割蒙面数组时如何保留蒙版?

时间:2015-12-11 18:15:37

标签: python numpy masked-array

当我创建一个Numpy蒙面数组的视图(通过切片)时,掩码被复制到视图中 - 这样对视图的更新不会改变原始掩码(但是会更改原始数组中的数据。)

我想要的是在更新视图时更改两者原始数据原始蒙版。

来自Numpy documentation

  

访问切片时,输出是数据属性的掩码数组   是原始数据的视图,其掩码是nomask(如果有的话)   原始数组中没有无效条目)或者副本   相应的原始面具切片。副本是必须避免的   将掩模的任何修改传播到原始。

实施例

import numpy.ma as ma

orig_arr = ma.array([[11,12],[21,22]])
orig_arr[1,:] = ma.masked

print orig_arr
## Prints: [[11 12]
##          [-- --]]

view_arr = orig_arr[1,:]
print view_arr
## Prints: [-- --]

view_arr[:] = [31,32]
print view_arr
## Prints: [31 32]

print orig_arr
## Prints: [[11 12]
##          [-- --]]
print orig_arr.data[1,:]
## Prints: [31 32]

正如您所看到的,原始数组中的数据已更新,但是 面具没有。

如何在视图中进行更新会影响原始数组中的掩码?

1 个答案:

答案 0 :(得分:3)

尝试在更改值

之前关闭视图中的蒙版
orig_arr = ma.array([[11,12],[21,22]])
orig_arr[1,:] = ma.masked

print orig_arr
## Prints: [[11 12]
##          [-- --]]

view_arr = orig_arr[1,:]
print view_arr
## Prints: [-- --]

view_arr.mask=False # or [True, False] 


view_arr[:] = [31,32] 
print view_arr
## Prints: [31 32] #or [-- 32]

print orig_arr
## Prints: [[11 12]
##          [31 32]] # or [-- 32]