3

当我创建一个 Numpy 掩码数组的视图(通过切片)时,掩码被复制到视图中——因此对视图的更新不会更改原始掩码(但会更改原始数组中的数据)。

我想要的是在更新视图时同时更改原始数据原始掩码。

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]

如您所见,原始数组中的数据已更新,但掩码没有。

如何使视图中的更新影响原始数组中的掩码?

4

1 回答 1

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]
于 2015-12-11T18:41:57.683 回答