分配给掩码数组应该清除掩码。这在单维数组中对我来说可以,但在多维数组中不起作用。我可以通过将数组展平为单个维度或显式分配掩码(如下所示)来解决此问题,但似乎我不必执行任何一个操作。我做错了吗?

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,我相信您会得到期望的结果。

10-04 16:22