分配给掩码数组应该清除掩码。这在单维数组中对我来说可以,但在多维数组中不起作用。我可以通过将数组展平为单个维度或显式分配掩码(如下所示)来解决此问题,但似乎我不必执行任何一个操作。我做错了吗?
import numpy
marray = numpy.ma.masked_all(3)
marray
marray.hardmask
marray.data
marray.mask
marray[2] = 2
marray
marray2 = numpy.ma.masked_all((3,3))
marray2
marray2.hardmask
marray2.data
marray2.mask
marray2[2][2] = 2
marray2
marray2.data
marray2.mask
marray2.mask[2][2] = False
marray2
最佳答案
当您执行marray2[2][2] = 2
时,第一个[2]
实际上返回的是数组第三行的副本,而不是对marray2
中该行的引用,因此您要操纵该副本,并且不影响marray2
。
与列表和元组不同,numpy数组支持多维数组的多维索引。尝试用marray2[2][2] = 2
替换marray2[2,2] = 2
,我相信您会得到期望的结果。