当我创建一个Numpy蒙面数组的视图(通过切片)时,掩码被复制到视图中 - 这样对视图的更新不会改变原始掩码(但是会更改原始数组中的数据。)
我想要的是在更新视图时更改两者原始数据和原始蒙版。
访问切片时,输出是数据属性的掩码数组 是原始数据的视图,其掩码是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]
正如您所看到的,原始数组中的数据已更新,但是 面具没有。
如何在视图中进行更新会影响原始数组中的掩码?
答案 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]